Apollo(阿波羅)是攜程框架部門研發的分佈式配置中心,可以集中化管理應用不一樣環境、不一樣集羣的配置,配置修改後可以實時推送到應用端,而且具有規範的權限、流程治理等特性,適用於微服務配置管理場景。java
經過對比,能夠看出,生成環境中 Apollo 相比 Spring Cloud Config 更具備優點一些。git
參照 https://github.com/ctripcorp/apollo/wiki/Quick-Start 搭建 Apollo 配置中心,文檔寫的很清楚,這裏就贅述了。程序員
搭建完成並啓動後,訪問 http://localhost:8070 ,界面以下。github
輸入用戶名 apollo,密碼 admin 後登陸後,點擊SampleApp進入配置界面。spring
建立一個springboot項目,主要代碼以下。shell
添加 Apollo 客戶端的依賴,爲了編碼方便引入commons-lang3。apache
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.3.0</version> </dependency> <!-- 爲了編碼方便,並不是apollo 必須的依賴 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency>
server: port: 8761 app: id: springboot-apollo apollo: meta: http://127.0.0.1:8080 bootstrap: enabled: true eagerLoad: enabled: true logging: level: com: gf: controller: debug
配置說明:bootstrap
@RestController public class HelloController { private static Logger logger = LoggerFactory.getLogger( HelloController.class ); @Value( "${server.port}" ) String port; @GetMapping("hi") public String hi(String name) { logger.debug( "debug log..." ); logger.info( "info log..." ); logger.warn( "warn log..." ); return "hi " + name + " ,i am from port:" + port; } }
@SpringBootApplication @EnableApolloConfig public class SpringbootApolloApplication { public static void main(String[] args) { SpringApplication.run( SpringbootApolloApplication.class, args ); } }
啓動項目。如今須要去配置中心作些關於這個springboot客戶端的一些配置。springboot
第一步:訪問http://localhost:8070 登陸後,選擇建立項目。微信
第二步:填寫配置信息。
配置說明:
提交配置後會出現以下項目配置的管理頁面。
第一步:點擊 「新增配置」,配置須要管理的 application.properties 中的屬性。
點擊提交,以後按照一樣的方法,新增須要動態管理的 application.properties 中的屬性。
提交後,跳轉到配置的管理界面:
配置只有在發佈後纔會真的被應用使用到,因此在編輯完配置後,須要發佈配置。點擊「發佈按鈕」。
填寫發佈相關信息,點擊發布 。
在配置中心,修改 server.port 的值爲 8762 併發布。
Postman 訪問以前寫個測試接口 http://127.0.0.1:8761/hi?name=zhangsan ,返回以下。
說明 客戶端 獲取到了 配置中心修改後的 server.port 的值 。
注意:
日誌模塊是每一個項目中必須的,用來記錄程序運行中的相關信息。通常在開發環境下使用DEBUG級別的日誌輸出,爲了方便查看問題,而在線上通常都使用INFO或者ERROR級別的日誌,主要記錄業務操做或者錯誤的日誌。那麼問題來了,當線上環境出現問題但願輸出DEBUG日誌信息輔助排查的時候怎麼辦呢?修改配置文件,從新打包而後上傳重啓線上環境,之前確實是這麼作的。
雖然上面咱們已經把日誌的配置部署到Apollo配置中心,但在配置中心修改日誌等級,依然須要重啓應用才生效,下面咱們就經過監聽配置的變化,來達到熱更新的效果。
@Configuration public class LoggerConfig { private static final Logger logger = LoggerFactory.getLogger(LoggerConfig.class); private static final String LOGGER_TAG = "logging.level."; @Autowired private LoggingSystem loggingSystem; @ApolloConfig private Config config; @ApolloConfigChangeListener private void configChangeListter(ConfigChangeEvent changeEvent) { refreshLoggingLevels(); } @PostConstruct private void refreshLoggingLevels() { Set<String> keyNames = config.getPropertyNames(); for (String key : keyNames) { if (StringUtils.containsIgnoreCase(key, LOGGER_TAG)) { String strLevel = config.getProperty(key, "info"); LogLevel level = LogLevel.valueOf(strLevel.toUpperCase()); loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level); logger.info("{}:{}", key, strLevel); } } } }
關鍵點講解:
application.yml 中配置的日誌級別是 debug ,訪問http://127.0.0.1:8761/hi?name=zhangsan ,控制檯打印以下。
2019-03-05 18:29:22.673 DEBUG 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : debug log... 2019-03-05 18:29:22.673 INFO 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : info log... 2019-03-05 18:29:22.673 WARN 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : warn log...
如今在配置中心修改日誌級別爲 warn。
再次訪問http://127.0.0.1:8761/hi?name=zhangsan ,控制檯打印以下。
2019-03-05 19:07:19.469 WARN 4264 --- [nio-8762-exec-3] com.gf.controller.HelloController : warn log...
說明日誌級別的配置,已經支持熱更新了。關於apollo 的更多應用 ,能夠參照github的文檔。
源碼下載 : https://github.com/gf-huanchupk/SpringBootLearning/tree/master/springboot-apollo
歡迎掃碼或微信搜索公衆號《程序員果果》關注我,關注有驚喜~