分布式配置—Apollo加Springboot

本文内容总结分布式配置Apollo的在Springboot项目中的使用

以下:

官方文档请看https://github.com/ctripcorp/apollo/wiki

创建应用

首先在Apollo管理平台创建一个应用,注意AppId,程序中会用到。

环境选择

由于我们这里只配置了一个DEV环境,就选择DEV环境,如果有多个环境可以选择相应的环境

添加集群

暂时不会遇到,如果不同集群使用一样的配置,则没有必要创建集群

新增配置

在创建好应用之后,会默认有一个application的namespace,对应的就是Springboot项目中的application.properties配置文件,左上角新增你的配置,可以一条条添加也可以通过文本形式写入。

1
2
3
4
5
6
spring.datasource.url = jdbc:mysql://XXXXXX:3306/demo?useUnicode=true&characterEncoding=utf8
spring.datasource.username = apollo
spring.datasource.password = apollo
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
mybatis.typeAliasesPackage = com.apollo.starter.pojo
mybatis.mapperLocations = classpath:mapper/*.xml

这个就是Springboot项目最基本的数据库连接配置以及mybatis相关的配置,这里是直接写到了Apollo配置中心里面,而不是Springboot项目的application.properties里面。

配置好项目之后需要发布才能生效。(注意)

创建Springboot项目

创建一个Springboot的WEB项目,注意这里application.properties配置文件里面只需按照一下配置即可

1
2
3
4
app.id=应用的ID
apollo.bootstrap.enabled=true
apollo.meta=http://metaserver:8080
spring.profiles.active=dev
新增Maven依赖
1
2
3
4
5
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.1</version>
</dependency>
读取配置

appication配置会默认被读取到程序中,而如果有多个namespace,想要读取特定的namespace中的配置信息时也有很多种读Apollo配置的方式,可通过注解@Value也可以通过@ApolloConfig注解等多种方式,这里推荐使用注解@ApolloConfig,这里演示在Controller层中使用Apollo相关的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Controller
@RequestMapping(value="")
public class DemoController {

@Autowired
private CompanyService companyService;

@ApolloConfig("TEST1.commen")
private Config commonConfig;

@RequestMapping(value = "/company", method = RequestMethod.GET)
@ResponseBody
public Company getCompany(@RequestParam(value = "ID") Integer ID){
return companyService.getCompanyByID(ID);
}

@RequestMapping(value = "/nameIs", method = RequestMethod.GET)
@ResponseBody
public String nameIs(){
return commonConfig.getProperty("name","value");
}
}

Tips 尽量不要再一个类中引入两个或多个namespace等配置信息,如果这样做会造成性能下降严重

启动项目

正常启动项目即可,如果在SpringBoot项目启动日志中发现WARN,无法获取配置的情况,请不要忽视,这是因为Apollo的网络策略配置支持内网之间的互相调用和传输,本地测试是要想也可以使用Apollo的功能可以在configservice服务器配置相关启动参数即可,首先进入scripts文件夹,编辑startup.sh文件,启动参数export JAVA_OPTS这一项,在里面参数里面新增

1
-Deureka.instance.ip-address=你的IP地址

重启configservice

-->