这里引入 spring-cloud-config-server 便可,spring-boot-starter-security 只是为了给配置中心加一个访问验证,能够忽略该引用:git
<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>
研发项目时,公司确定会有几套环境,生产、测试、开发、本地等,因此咱们的配置文件也应该是分别对应的,下图中是一个示例:config-file 是远程的git仓库,test 是项目下的一级文件夹,test下有两个文件夹分别存放 prd 和 dev 环境的配置文件,application.properties 是公用配置文件,config-test.properties中的 config-test 是其中一个微服务的名称,这样微服务公共的配置放到 application.properties,微服务个性化的配置在各自的配置文件中。注意:微服务的个性化配置会覆盖 application.properties 中的相同配置。spring
下面的配置默认加载远程仓库 test/dev 下的配置,若是密码中含有特殊字符,能够加转义符“\”,或者直接用单引号 “ ‘ ” 将密码引发来,这里用户名默认为user,密码:12345bootstrap
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}
加上 @EnableConfigServer 注解便可bash
@SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }
http://localhost:8888/test/application,若是上面设置了访问密码,会提示输入用户名和密码,填入相关信息进行验证,而后能够看到相关配置信息:app
<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>
这里配置文件使用 bootstrap.properties,项目启动时会先加载 bootstrap.properties 而后再加载 application.properties,这里咱们指定 prd ,这样咱们就能够指定了配置文件,注意这里的微服务名称为:config-test ,下边会用到ide
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
能够看到,咱们这里并无加有关配置中心的特殊注解,我只是写了一个测试接口spring-boot
@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(); } }
如今咱们有了三个配置文件:项目里的 bootstrap.properties、远程的 application.properties 和远程的 config-test.properties。配置说明:1). 在上面三个文件中分别定义了 test0一、test0二、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.propertiesui
在远程仓库的git仓库中添加下列配置:
# 容许本地配置覆盖远程配置 spring.cloud.config.allowOverride=true spring.cloud.config.overrideNone=true spring.cloud.config.overrideSystemProperties=false
而后访问测试接口:http://127.0.0.1:8082/test,test0五、test06加载的是本地bootstrap.properties中的配置信息:
开发的时候,不免会更改某些配置,若是每次更改配置都进行服务的从新发布,有点让人头大,因此咱们在更改配置文件以后,手动刷新一下配置。
在非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