2018-06-26 10:22:01 1439瀏覽
這種方式僅適合于比較小的項目,例如只有一兩臺服務(wù)器,而且配置文件是可以直接修改的。例如Springmvc以war包的形式部署,可以直接修改resources中的配置文件。如果是Springboot項目,還想用這種方式的話,就要引用一個外部可以編輯的文件,比如一個固定的目錄,因為springboot大多數(shù)以jar包部署,打到包里的配置文件沒辦法直接修改。如果是比較大的項目,最好還是用配置中心,例如攜程的Apollo、Consul等。
原始方式
原始方式指的是每次要修改配置的時候,都要重新打包發(fā)布或者重啟服務(wù)器。
@Repository public class ConfigWatcher { private static final Logger logger = LoggerFactory.getLogger(ConfigWatcher.class); private static WatchService watchService; @PostConstruct public void init() { logger.info("啟動配置文件監(jiān)控器"); try { watchService = FileSystems.getDefault().newWatchService(); URL url = ConfigWatcher.class.getResource("/"); Path path = Paths.get(url.toURI()); path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE); } catch (Exception e1) { e1.printStackTrace(); } /** * 啟動監(jiān)控線程 */ Thread watchThread = new Thread(new WatchThread()); watchThread.setDaemon(true); watchThread.start(); /**注冊關(guān)閉鉤子*/ Thread hook = new Thread(new Runnable() { @Override public void run() { try { watchService.close(); } catch (IOException e) { e.printStackTrace(); } } }); Runtime.getRuntime().addShutdownHook(hook); } public class WatchThread implements Runnable { @Override public void run() { while (true) { try { // 嘗試獲取監(jiān)控池的變化,如果沒有則一直等待 WatchKey watchKey = watchService.take(); for (WatchEvent<?> event : watchKey.pollEvents()) { String editFileName = event.context().toString(); logger.info(editFileName); /** * 重新加載配置 */ } watchKey.reset();//完成一次監(jiān)控就需要重置監(jiān)控器一次 } catch (Exception e) { e.printStackTrace(); } } } } }
【關(guān)注微信公眾號獲取更多學習資料】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>