- github: https://github.com/ctripcorp/apollo
- 启动: image.png
- 管理后台 http://localhost:8070
image.png - 注册中心 http://localhost:8080
image.png
# 与SpringCloud/SpringBoot集成
-
在apollo管理后台新建项目
image.png -
添加配置
image.png - 添加依赖
<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"})
-
公共配置文件
image.png
先创建一个普通项目,再在项目中添加Namespace
image.png
注意看提示和备注 -
测试
@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();
}
}
image.png
- 注意:
- 项目中配置的
application
命名空间默认读取的是该appId
下的application
命名空间(并且是私有的命名空间),一般如果要读取公共的配置文件,格式是xxx.yyy
,xxx为部门名称,yyy为公共的命名空间 - apollo中配置的属性并不需要在配置文件中先定义好。(可以只在apollo中配置即可)
- 配置文件的优先级为引用顺序递减
-
@EnableApolloConfig({"application", "TEST1.base"})
=>TEST1.base
中的配置无法覆盖application
中的配置。 -
@EnableApolloConfig({"TEST1.base","application"})
=>application
中的配置无法覆盖TEST1.base
中的配置。
-
- 项目中配置的
网友评论