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级别的,也无能为力修改刷新,要注意。