美文网首页架构Springboot整合对接第三方
SpringCloud项目中使用携程Apollo分布式配置中心

SpringCloud项目中使用携程Apollo分布式配置中心

作者: 垃圾简书_吃枣药丸 | 来源:发表于2019-12-28 16:31 被阅读0次

    # 与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中的配置。

    相关文章

      网友评论

        本文标题:SpringCloud项目中使用携程Apollo分布式配置中心

        本文链接:https://www.haomeiwen.com/subject/xgpsoctx.html