019 搭建config配置中心
< 返回列表时间: 2018-05-07来源:OSCHINA
1 config配置中心
1-1 pom依赖
这里引入 spring-cloud-config-server 即可,spring-boot-starter-security 只是为了给配置中心加一个访问验证,可以忽略该引用: <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
1-2 配置文件 application.yml
研发项目时,公司肯定会有几套环境,生产、测试、开发、本地等,所以我们的配置文件也应该是分别对应的,下图中是一个示例:config-file 是远程的git仓库,test 是项目下的一级文件夹,test下有两个文件夹分别存放 prd 和 dev 环境的配置文件,application.properties 是公用配置文件,config-test.properties中的 config-test 是其中一个微服务的名称,这样微服务公共的配置放到 application.properties,微服务个性化的配置在各自的配置文件中。注意:微服务的个性化配置会覆盖 application.properties 中的相同配置。

下面的配置默认加载远程仓库 test/dev 下的配置,如果密码中含有特殊字符,可以加转义符“\”,或者直接用单引号 “ ‘ ” 将密码引起来,这里用户名默认为user,密码:12345 spring: cloud: config: server: git: uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/dev username: 995586041@qq.com password: ',******' repos: prd: pattern: "*/prd*" uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/prd username: 995586041@qq.com password: \,****** dev: pattern: "*/dev*" uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/dev username: 995586041@qq.com password: ',******' server: port: 8888 security: user: password: ${CONFIG_SERVICE_PASSWORD:12345}
1-3 启动类
加上 @EnableConfigServer 注解即可 @SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }
1-4 访问
http://localhost:8888/test/application,如果上面设置了访问密码,会提示输入用户名和密码,填入相关信息进行验证,然后可以看到相关配置信息:

2 测试配置中心
1-1 pom文件 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>
1-2 配置文件 bootstrap.properties
这里配置文件使用 bootstrap.properties,项目启动时会先加载 bootstrap.properties 然后再加载 application.properties,这里我们指定 prd ,这样我们就可以指定了配置文件,注意这里的微服务名称为:config-test ,下边会用到 server.port = 8082 spring.profiles.active = prd spring.application.name = config-test spring.cloud.config.uri = http://127.0.0.1:8888 spring.cloud.config.fail-fast = true spring.cloud.config.username = user spring.cloud.config.password = 12345 spring.cloud.config.profile=prd goldleaf.test01 = test01 ${spring.profiles.active} bootstrap.properties goldleaf.test05 = test05 ${spring.profiles.active} bootstrap.properties goldleaf.test06 = test06 ${spring.profiles.active} bootstrap.properties
1-3 启动类及测试接口
可以看到,我们这里并没有加有关配置中心的特殊注解,我只是写了一个测试接口 @SpringBootApplication @RestController public class UserApplication { @Value("${goldleaf.test01}") private String test01; @Value("${goldleaf.test02}") private String test02; @Value("${goldleaf.test03}") private String test03; @Value("${goldleaf.test05}") private String test05; @Value("${goldleaf.test06}") private String test06; public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } @GetMapping("/test") public String getConfig() { StringBuilder builder = new StringBuilder(); builder.append("test01:" + test01 + "\r\n"); builder.append("test02:" + test02 + "\r\n"); builder.append("test03:" + test03 + "\r\n"); builder.append("test05:" + test05 + "\r\n"); builder.append("test06:" + test06 + "\r\n"); return builder.toString(); } }
1-4 测试
现在我们有了三个配置文件:项目里的 bootstrap.properties、远程的 application.properties 和远程的 config-test.properties。配置说明:1). 在上面三个文件中分别定义了 test01、test02、test03,用来说明三个配置文件中的配置都是起作用的;2). 在上面三个文件中同时定义了test05,用来说明三个文件的优先级;3). 在 bootstrap.properties 和 application.properties 中同时定义了 test06 ,用来确定二者的优先级。启动项目之后,现在我们通过访问 config-test 的test接口查看一下结果:

test01-03,说明三个文件中的配置都有加载;test05 说明微服务的个性化配置会覆盖前面的配置,优先级最高;test06 说明默认情况下远程仓库的 application.properties 优先级高于 bootstrap.properties
优先级顺序:远程config-test > 远程application.properties > 本地bootstrap.properties
3 本地覆盖远程配置
在远程仓库的git仓库中添加下列配置: # 允许本地配置覆盖远程配置 spring.cloud.config.allowOverride=true spring.cloud.config.overrideNone=true spring.cloud.config.overrideSystemProperties=false
然后访问测试接口:http://127.0.0.1:8082/test,test05、test06加载的是本地bootstrap.properties中的配置信息:

4 手动刷新配置
开发的时候,难免会更改某些配置,如果每次更改配置都进行服务的重新发布,有点让人头大,所以我们在更改配置文件之后,手动刷新一下配置。
在非config端的pom文件中增加 spring-boot-starter-actuator 依赖: <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
修改git仓库的配置文件之后,POST方式调用服务的 /refresh 端点,如:http://127.0.0.1:8082/refresh 这里会返回有哪些配置点被修改:

查看结果:

5 项目代码
core-simple 项目: https://code.aliyun.com/995586041/core-simple.git
config-server: https://code.aliyun.com/995586041/config.git
config-client: https://code.aliyun.com/995586041/config-client.git
config-file: https://code.aliyun.com/995586041/config-file.git
热门排行