springboot项目中如何使用Apollo配置中心


为什么要使用Apollo

在开发应用的时候我们常常需要把一些属性抽取出来放在配置文件里面,方便后面根据需要进行修改。在没有使用配置中心之前,可能我们只是把配置都放在项目的配置文件下面,这样虽然是省事了不少,但也有一些缺点,比如想要修改配置的时候需要重新构建项目和重启服务 、生产环境上一些敏感的配置容易泄露等等。

Apollo安装

这个可以上github,上面有详细的安装说明文档,链接,下面主要讲下在代码里面的使用

在项目pom.xml中引入apollo相关jar包

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

在配置文件(application.properties)中添加apollo相关配置

# apollo集成
# apollo 配置应用的 appid
app.id=test
# apollo meta-server地址,一般同config-server地址
#当前环境服务配置地址,生产环境建议至少双节点,可以填写多个逗号分隔,使用一个单独的域,如 http://config.xxx.com(由nginx等软件负载平衡器支持),而不是多个IP地址,因为服务器可能会扩展或缩小。
apollo.meta=http://10.0.0.220:8080
#启用apollo配置开关
apollo.bootstrap.enabled=true
#将Apollo配置加载提到初始化日志系统之前
apollo.bootstrap.eagerLoad.enabled=true
# apollo 使用配置的命名空间,多个以逗号分隔
apollo.bootstrap.namespaces = application

java代码中读取apollo配置的几种写法:

1. 通过@Configuration和@Value注解的方式,此种方式发布会自动刷新

@Configuration
public class JavaConfigBean1 {
  @Value("${timeout:20}")
  private int timeout;
  public int getTimeout() {
    return timeout;
  }
}

2. 使用@ConfigurationProperties读取,此种方式发布不会自动刷新

@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读取,此种方式发布会自动刷新

 @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读取,此种方式会自动刷新

@ApolloJsonValue("${jsonBeanProperty:[]}")
private List<User> anotherJsonBeans;

@GetMapping("/test4")
public void test4(){
 anotherJsonBeans.forEach(item -> {
   System.err.println(item.getUsername()+"--"+item.getPassword());
 });
}

自动刷新就是改了配置中心的配置可以不用重启服务,常用的使用方式就以上这些,当然还有一些复杂的使用方式,比如动态数据源等实现方式可以看官方的demo


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM