Apollo客戶端接入
apollo是一個攜程的配置中心,本身是叢集化,和註冊中心eureka整合。
參考文章:https://www.cnblogs.com/niejunlei/p/12502020.html
引入pom.xml:
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.4.0</version> </dependency>
在 spring中構建apollo的啟動配置。
@EnableApolloConfig(order=1) @Configuration public AppConfiguration{}
在META-INF下建立app.properties(也可以將以下資訊配置在application.properties中,需要在@EnableApolloConfig配置屬性檔案讀取地方)
app.id=dts-service apollo.meta=http://127.0.0.1:8080
其中 meta 中的地址並非apollo的console介面(預設8070)的配置地址,而是eureka(8080)地址,apollo叢集通過配置中心進行叢集。
要不然會出錯,拽取不到資料。 java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
通過Meta server可以看到。需要管理員賬號才可以。預設是8080
apollo會將配置資訊拉入本地的預設地址地方。 c:\opt\data\[appId]\config-cache\[appId]+default+application.properties
apollo 可以為其配置環境地址env,預設地址是:/opt/settings/server.properties key-value
env value可以為dev,fat,uat,pro
灰度釋出:
apollo的專案中可支援灰度釋出,灰度釋出通過指定IP將部分配置用在灰度機子上,灰度ok後,考慮是放棄還是覆蓋生產。
例項列表:
點選專案進入,可看到例項列表,就知道應用是否已經關聯到當前apollo上。
在啟動配置中新增:
@EnableApolloConfig
在屬性檔案中設定:
logging.config=classpath:logback.xml
log日誌動態對接apollo:
* @author DennyZhao(20023137) * @date 2021/2/4 */ @Configuration public class ApolloConfiguration { private static final Logger logger = LoggerFactory.getLogger(ApolloConfiguration.class); private static final String LOG_NAME = "logging.level.root"; @ApolloConfig private Config config; @Autowired private LoggingSystem loggingSystem; @ApolloConfigChangeListener private void onChange(ConfigChangeEvent changeEvent) { String level = config.getProperty(LOG_NAME, "INFO"); loggingSystem.setLogLevel("root", LogLevel.valueOf(level)); logger.warn("apollo changed..logging.root.level:{}", level); } }
靜態接入方式:
Config config = ConfigService.getAppConfig(); ConfigChangeListener listener = new ConfigChangeListener() { @Override public void onChange(ConfigChangeEvent configChangeEvent) { System.out.println("-------configEvent"); configChangeEvent.changedKeys(); } }; config.addChangeListener(listener); }
由於有的配置項會優先從@ConditionalOnProperties(***),這樣apollo的配置啟動滯後於屬性獲取。這時候就要寫屬性檔案新增:
apollo.bootstrap.enabled = true //啟動
#apollo.bootstrap.eagerLoad.enabled = true //在日誌前載入,可對日誌級別進行啟動時管控
對於以下方式注入的屬性,apollo無法重新整理,需要在監聽器配合spring的listener監聽器,refresh EnvironmentEvent。
@ConfigurationProperties(prefix = "test.metrics")
對於屬性中是Map級別的,也無能為力修改重新整理,要注意。