配置中心簡介
config server 可以從本地或git倉庫里讀取配置,配置可以放置在一個module里進行管理。
配置高可用config server
把config-server 配置到eureka-server服務里統一管理,可以把config-server配置成集群:
新建config server 模塊
a)引入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
b)配置文件 application.yml
spring: cloud: config: server: native: search-locations: classpath:/shared # search-locations: file:E://Java/本地磁盤 profiles: active: native application: name: config-server #把實例注冊到eureka server服務里管理 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
在項目resource里建shared文件夾,並新建文件config-client-dev.yml,添加如下內容
server: port: 8783 foo: foo version 1
c)啟動類添加注解
@EnableConfigServer
d) 共用的配置,即文件可以繼承
我們在遠程倉庫中創建了三個對應不同環境的配置文件user-service-dev.yml,user-service-test.yml,user-service-prod.yml,假如在不同環境下有很多共用的配置,我們可以再創建一個user-service.yml用來存放共同配置,springcloud-config取配置時,會將你的對應環境配置與user-service.yml合並后再返回。application.yml文件和所有的文件進行合並后再返回。
新建config client 模塊
a)引入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
b)配置文件,bootstrap.yml
spring: application: name: config-client cloud: config: fail-fast: true discovery: enabled: true serviceId: config-server profiles: active: dev eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
根據{spring.application.name}-{profiles.active}名稱到config-server 模塊shared目錄下查詢配置文件
c)啟動類不用添加其它注解
d)使用,和本地配置使用一樣
@SpringBootApplication @RestController @EnableEurekaClient public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } @Value("${foo}") String foo; @RequestMapping(value = "/foo") public String hi(){ return foo; } }
測試
在瀏覽器輸入地址:http://localhost:8783/foo
使用Spring Cloud Bus刷新配置
如果我們想修改配置文件,又不用重啟項目立即生效,則需要用到spring cloud bus刷新配置。
修改config client模塊
只需求修改config-client模塊,即可實現動態刷新
a)引入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
b)修改配置文件,添加如下內容,要先安裝RabbitMQ ,
rabbitmq: host: localhost port: 15672 username: guest password: guest publisher-confirms: true virtual-host: /
#先把安全策略設置為false management: security: enabled: false
c)在使用配置的類上添加 @RefreshScope注解
@RestController @RefreshScope public class ConfigClientApplication { @Value("${foo}") String foo; @RequestMapping(value = "/foo") public String hi(){ return foo; } }
測試
修改config-server項目 目錄shared下的config-client-dev.yml配置文件內容,然后 發送 post請求 http://localhost:8781/bus/refresh,再http://localhost:8783/foo,你會發現配置文件修改內容已生效