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客户端接入

 

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


 

Apollo客户端接入

上一篇:机器学习——集成学习(Bagging、Boosting、Stacking)


下一篇:168. Excel表列名称 力扣(简单) 组会心态崩了,看了题解