zoukankan      html  css  js  c++  java
  • spring boot2.1读取 apollo 配置中心2

    第二篇:创建spring boot2.1项目

    引用apollo的java客户端jar包

            <dependency>
                <groupId>com.ctrip.framework.apollo</groupId>
                <artifactId>apollo-client</artifactId>
                <version>1.1.2</version>
            </dependency>

    这里直接介绍使用注解的方式读取配置,其它方式的介绍,请查看官网:https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

    我们通过上篇创建几个配置:

     创建一个配置文件的Bean.

    @Value表示具体的配置项,可以设置默认值。

    @ApolloConfig(namespace)可以匹配apollo的命名空间,如不写,则指application命名空间。

    @ApolloConfigChangeListener(namespace)更新时调用的方法, 如不写,则指application命名空间。

    public class ApplicationConfigBean {
    
        @Value("${TimeOut:200}")
        private int timeOut;
        private String connectionString;
    
        @ApolloConfig
        private Config config;
    
        @ApolloConfig("TEST1.ConfigCenter")
        private  Config configCenterConfig;
    
        @PostConstruct
        void initialize(){
            System.out.println("timeOut is " + timeOut);
            System.out.println("connectionString is " +connectionString);
            System.out.println("Keys for config" + config.getPropertyNames());
            System.out.println("Keys for configCenterConfig is " +configCenterConfig.getPropertyNames());
        }
    
        public int getTimeOut() {
            return timeOut;
        }
    
        public String getConnectionString() {
            return connectionString;
        }
    
        @Value("${ConnectionString}")
        public void setConnectionString(String connectionString) {
            this.connectionString = connectionString;
        }
    
        @ApolloConfigChangeListener
        private  void someChangeHandler(ConfigChangeEvent changeEvent){
            System.out.println("[someChangeHandler] changes for namespace: " + changeEvent.getNamespace());
            if (changeEvent.isChanged("TimeOut")){
                refreshTimeOut();
            }
    
            if (changeEvent.isChanged("ConnectionString")){
                setConnectionString(changeEvent.getChange("ConnectionString").getNewValue());
            }
        }
    
        @ApolloConfigChangeListener("TEST1.ConfigCenter")
        private  void configCenterChangeHandler(ConfigChangeEvent changeEvent){
            System.out.println("[configCenterChangeHandler] for namespace:" + changeEvent.getNamespace());
    
            for (String key: changeEvent.changedKeys()){
                ConfigChange change = changeEvent.getChange(key);
                System.out.println("[configCenterChangeHandler] Change Key: "+ change.getPropertyName() +"   oldValue:" + change.getOldValue() +" newValue:" + change.getNewValue() );
            }
        }
    
        private void refreshTimeOut() {
            timeOut = config.getIntProperty("TimeOut", timeOut);
            System.out.println("Refresh timeout is " + timeOut);
        }
    }

    @EnableApolloConfig 启用apollo配置。

    @Configuration
    @EnableApolloConfig
    public class ApplicationConfig {
    
        @Bean
        public  ApplicationConfigBean applicationConfigBean(){
            return  new ApplicationConfigBean();
        }
    }

    然后,需要指定我们的所使用的app.id 在appication.properties中

    app.id=**

    最后,我们要指定运行时环境和configserver的地址:

    这里需要注意我们写的是-Dapollo.configService   而不是meta。

    因为我们是直接访问的config service,没有访问eureka,  如果访问的是eureka:那我们访问的是configservice注册到eureka的地址,但这个地址是docker的内部地址,我们外部是访问不到的。所有这个要注意

    运行一下,就可以看到配置信息的输出了:

  • 相关阅读:
    Java 中的四种权限修饰符
    Java final关键词
    Java 多态
    Java 接口
    Java 抽象类
    iOS下JS与OC互相调用(八)--Cordova详解+实战
    iOS下JS与OC互相调用(七)--Cordova 基础
    计算机网络中的TCP/IP模型
    计算机网络中的七层模型
    Android简易实战教程--第三十一话《自定义土司》
  • 原文地址:https://www.cnblogs.com/hankuikui/p/10026391.html
Copyright © 2011-2022 走看看