第二篇:创建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的内部地址,我们外部是访问不到的。所有这个要注意
运行一下,就可以看到配置信息的输出了: