一  常用配置中心

随着分布式项目架构的流行,项目的配置信息管理变得越来越重要,好在市面上也涌现出众多优秀配置中心产品如nacos、apollo、disconf .  配置中心产品可根据实际需要选择,如果项目使用阿里系技术栈较多则推荐nacos, 其他情况下apollo则是较好的选项

二  apollo的安装、启动和基本使用

参考链接:https://ctripcorp.github.io/apollo/#/zh/deployment/quick-start

如果比较偏开发上面的参考链接差不多就够用了,按上文一步步操作即可成功部署apollo了,启停也特别简单 直接 ./demo.sh  start |stop  即可 ,启动成功直接访问即可

spring boot配置apollo的指定环境 springboot接入apollo_spring boot

打开浏览器访问出现登录界面,使用 apollo/admin作为用户名和密码即可登录成功,之后就能创建项目、创建namespace、发布配置等

三  apollo的结构

配置-->集群-->环境(env)-->应用(application)

上面从左到右是apollo从小到大的层级,需要理解namespace的含义,在apollo中namespace相当于配置的分类,按目前多模块的项目来说则可理解成每个项目拥有自己的配置,可通过namespace来划分;这和nacos的namespace有一些区别

四  springboot和apollo的整合

1  pom依赖项

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

2  配置文件编写

apollo:
  bootstrap:
    enabled: true
    namespaces: application,service.yml
  cluster: default
app:
  id: springboot-apollo

因为后面的配置文件是yml所以此处需要指定后缀,如果不指定则默认找properties后缀的的配置文件

下面是配置说明,摘抄自网络

  • apollo.meta: Apollo 配置中心地址。
  • apollo.cluster: 指定使用某个集群下的配置。
  • apollo.bootstrap.enabled: 是否开启 Apollo。
  • apollo.bootstrap.namespaces : 指定使用哪个 Namespace 的配置,默认 application。
  • apollo.cacheDir=/opt/data/some-cache-dir: 为了防止配置中心无法连接等问题,Apollo 会自动将配置本地缓存一份。
  • apollo.autoUpdateInjectedSpringProperties: Spring应用通常会使用 Placeholder 来注入配置,如${someKey:someDefaultValue},冒号前面的是 key,冒号后面的是默认值。如果想关闭 placeholder 在运行时自动更新功能,可以设置为 false。
  • apollo.bootstrap.eagerLoad.enabled : 将 Apollo 加载提到初始化日志系统之前,如果设置为 false,那么将打印出 Apollo 的日志信息,但是由于打印 Apollo 日志信息需要日志先启动,启动后无法对日志配置进行修改,所以 Apollo 不能管理应用的日志配置,如果设置为 true,那么 Apollo 可以管理日志的配置,但是不能打印出 Apollo 的日志信息。

3  项目加入apollo-env.properties

这里也尤其需要注意,只能是properties文件,不能用yml或者yaml文件代替,下面是文件内容

dev.meta=http://localhost:8080/

由于本地只有dev这个环境因此只需配置dev环境的apollo.meta就行,这个配置就是让客户端到这个地区获取配置的

4 编写springboot的项目启动类

这里和平时启动类写法差不多,就是多了一个启用apollo配置中心的注解

package com.debug;

import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableApolloConfig
public class StartApp {

    public static void main(String[] args) {
        SpringApplication.run(StartApp.class,args);
    }

}

5 从apollo的web控制台添加配置

添加流程可自行查阅资料,此处不在细说,配置文件如下所示:
 

spring boot配置apollo的指定环境 springboot接入apollo_bootstrap_02

配置添加后一定记得发布

6  编写一个测试的controller读取配置文件的内容

package com.debug;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

    @Value("${spring.datasource.url}")
    private String url;

    @GetMapping("/getConfig")
    @ResponseBody
    public String getConfig(){

        return  "url="+url;

    }
}

下面是运行截图:

spring boot配置apollo的指定环境 springboot接入apollo_bootstrap_03