Spring Cloud 之 配置中心 Spring Cloud Config
微服務架構下服務多了配置檔案多,為了方便統一管理配置,可以使用Spring Cloud Config集中管理。
可以從本地倉庫讀取配置檔案,也可以從Git倉庫獲取。本地倉庫的話就是把所有配置檔案放在你的Config Server 工程下面,Git的話就新建一個專門放配置檔案的倉庫就好了。
一、構建Config Server
在前面工程的基礎上,本節新建兩個model工程,Config Server 和 Config Client。
先演示從Git倉庫讀取配置
新建model:config-server
pom.xml
<dependency>
<groupId >org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency >
在應用主類添加註解:
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
配置檔案application.yml
eureka:
client:
serviceUrl:
# 註明自己的服務註冊中心的地址
defaultZone: http://localhost:7777/eureka/
server:
port: 9999
spring:
application:
name: config-server
cloud:
config:
server:
git:
# 在github上新建一個倉庫(springCloudConfigServer)存放配置檔案
# 直接訪問檔案瀏覽器也能輸出值 http://localhost:9999/config-client-dev.properties
uri: https://github.com/MistraR/springCloudConfigServer
# springCloudConfigServer倉庫下的配置檔案訪問路徑
search-paths: /**
#訪問git倉庫的使用者名稱
username: MistraR
password: ******
# 配置倉庫的分支
label: master
建立Git倉庫及檔案
二、構建Config Client
新建model:config-client
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
應用主類添加註解,新增測試方法:
@SpringBootApplication
@RestController
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
/**
* config-client從config-server獲取了name的屬性,而config-server是從git倉庫讀取的
*/
@Value("${name}")
String name;
@RequestMapping(value = "/hi")
public String hi() {
return name;
}
}
配置檔案application.yml
eureka:
client:
serviceUrl:
# 註明自己的服務註冊中心的地址
defaultZone: http://localhost:7777/eureka/
server:
port: 9998
spring:
application:
name: config-client
cloud:
config:
label: master
#dev開發環境配置檔案,test測試環境,pro正式環境
profile: dev
uri: http://localhost:9999/
discovery:
#從配置中心讀取檔案
enabled: true
# 配置中心的serviceId,即服務名
service-id: config-server
三、測試
啟動eureka-server,config-server,config-client。
訪問:http://localhost:9998/hi
瀏覽器輸出了name屬性的值:RoronoaZoro
config-client從config-server取值,config-server從Git倉庫讀取檔案取值。
四、從本地倉庫讀取配置檔案
config-server工程的依賴包和應用主類上註解不變,配置檔案稍作修改
application.yml
server:
port: 9999
spring:
cloud:
config:
server:
#指定從本地讀取配置檔案,resources/configFile
native:
search-locations: classpath:/configFile
#其他服務配置檔案的命名格式{applicationName}-{activeProfile}.yml如:user-service-pro.yml
#所有服務可以共享一個配置檔案,在configFile下新建一個application.yml
profiles:
#指定從本地讀取配置檔案
active: native
application:
name: config-server
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9999/eureka/
在resources資料夾下新建目錄configFile,存放所有的配置檔案
注意configFile目錄下的application.yml檔案,一些公共配置就可以寫在這裡,因為其他的服務讀取配置檔案的時候,除了讀取自己服務的配置檔案,還會讀取這個檔案的配置。
譬如在這裡配置了一些公共配置:
#公共配置檔案所有配置檔案預設繼承
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9999/eureka/
#關閉服務監控資訊Actuator的安全驗證
management:
security:
enabled: false
#feign呼叫開啟Hystrix
feign:
hystrix:
enabled: true
這裡有一個服務叫user-service,它的配置檔案就是上圖中的user-service-pro.yml。
在user-service這個工程中的resources目錄下的bootstrap.yml配置檔案就要指定去哪裡讀取它真正的配置檔案:
bootstrap.yml
#bootstrap名稱的配置檔案比application名稱的配置檔案有更高的優先順序執行
spring:
application:
name: user-service
cloud:
config:
#指定讀取配置檔案服務的地址
uri: http://localhost:9998
fail-fast: true
profiles:
#需要讀取的配置檔案版本 dev pro test
active: pro
user-service-pro.yml才配置了user-service的配置資訊
server:
port: 7001
spring:
#指定zipkin服務地址
zipkin:
base-url: http://localhost:8001
# rabbitmq:
# host: localhost
# port: 5672
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://112.74.38.117:3306/springcloud?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&&useSSL=true
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
Spring Cloud Config 可以組合 Spring Cloud Bus 實現配置檔案動態重新整理,參考文件:文件