本文最后更新于:2022年6月22日 下午
为什么要使用Apollo
在开发应用的时候我们常常需要把一些属性抽取出来放在配置文件里面,方便后面根据需要进行修改。在没有使用配置中心之前,可能我们只是把配置都放在项目的配置文件下面,这样虽然是省事了不少,但也有一些缺点,比如想要修改配置的时候需要重新构建项目和重启服务 、生产环境上一些敏感的配置容易泄露等等。
Apollo安装
这个可以上github,上面有详细的安装说明文档,链接,下面主要讲下在代码里面的使用
在项目pom.xml中引入apollo相关jar包
1 2 3 4 5 6
| <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.4.0</version> </dependency>
|
在配置文件(application.properties)中添加apollo相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13
|
app.id=test
apollo.meta=http://10.0.0.220:8080
apollo.bootstrap.enabled=true
apollo.bootstrap.eagerLoad.enabled=true
apollo.bootstrap.namespaces = application
|
java代码中读取apollo配置的几种写法:
1. 通过@Configuration和@Value注解的方式,此种方式发布会自动刷新
1 2 3 4 5 6 7 8
| @Configuration public class JavaConfigBean1 { @Value("${timeout:20}") private int timeout; public int getTimeout() { return timeout; } }
|
2. 使用@ConfigurationProperties读取,此种方式发布不会自动刷新
1 2 3 4 5 6 7 8 9 10 11 12
| @Configuration @ConfigurationProperties(prefix = "xx") public class JavaConfigBean2 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }
}
|
3. 使用@ApolloConfig读取,此种方式发布会自动刷新
1 2 3 4 5 6 7 8 9 10 11 12
| @ApolloConfig private Config config;
@GetMapping("/test3") public String test3(){ Set <String> propertyNames = config.getPropertyNames(); propertyNames.forEach(key -> { System.err.println(key+"="+config.getIntProperty(key,0)); }); return propertyNames.toString(); }
|
4. 使用@ApolloJsonValue读取,此种方式会自动刷新
1 2 3 4 5 6 7 8 9 10
| @ApolloJsonValue("${jsonBeanProperty:[]}") private List<User> anotherJsonBeans;
@GetMapping("/test4") public void test4(){ anotherJsonBeans.forEach(item -> { System.err.println(item.getUsername()+"--"+item.getPassword()); }); }
|
自动刷新就是改了配置中心的配置可以不用重启服务,常用的使用方式就以上这些,当然还有一些复杂的使用方式,比如动态数据源等实现方式可以看官方的demo