- github: https://github.com/ctripcorp/apollo
- 启动
管理后台 http://localhost:8070
# 与SpringCloud/SpringBoot集成
- 在apollo管理后台新建项目
添加配置
- 添加依赖
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.1.0</version> </dependency>
- SpringBoot项目配置
spring: application: name: biz-user app: id: ${spring.application.name} # 与apollo管理后台配置的项目的appId一致 apollo: meta: http://localhost:8080 bootstrap: enabled: true # 是否启用apollo namespaces: application,TEST1.base # 该app(appId)下的某个命名空间(某个配置文件)/或者x.y(x部门下的公开y命名空间)
apollo.bootstrap
可以使用注解的方式进行配置
@EnableApolloConfig({"application", "TEST1.base"})
- 公共配置文件
先创建一个普通项目,再在项目中添加Namespace
- 注意看提示和备注
- 测试
@Slf4j @EnableApolloConfig({"application", "TEST1.base"}) @MapperScan({"com.futao.biz.user.dao", "com.futao.biz.user.mapper"}) @SpringBootApplication(scanBasePackages = {"com.futao.common", "com.futao.biz.user"}) public class UserApplication implements CommandLineRunner { @Value("${app.apollo.username}") private String userName; @Value("${app.apollo.age}") private int age; @Value("${apl.conf1}") private String c1; @Value("${apl.conf2}") private String c2; @Value("${apl.conf3}") private String c3; @Value("${apl.conf4}") private String c4; public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } @Override public void run(String... args) throws Exception { new Thread(() -> { while (true) { log.info(StringUtils.repeat("-", 50)); log.info("userName:{}", userName); log.info("age:{}", age); log.info("c1:{}", c1); log.info("c2:{}", c2); log.info("c3:{}", c3); log.info("c4:{}", c4); try { Thread.sleep(2000L); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
注意:
- 项目中配置的
application
命名空间默认读取的是该appId
下的application
命名空间(并且是私有的命名空间),一般如果要读取公共的配置文件,格式是xxx.yyy
,xxx为部门名称,yyy为公共的命名空间 - apollo中配置的属性并不需要在配置文件中先定义好。(可以只在apollo中配置即可)
- 配置文件的优先级为引用顺序递减
@EnableApolloConfig({"application", "TEST1.base"})
=>TEST1.base
中的配置无法覆盖application
中的配置。@EnableApolloConfig({"TEST1.base","application"})
=>application
中的配置无法覆盖TEST1.base
中的配置。