1,配置中心可以用zookeeper來實現,也可以用apllo 來實現,springcloud 也自帶了配置中心config
zookeeper:實現分布式配置中心,主要是通過持久節點存儲配置信息加上事件通知
Apollo:實現分布式配置中心,主要是通過mysql 數據庫存儲配置信息,通過有圖形界面可以管理配置文件信息
srpingcloud config: 實現分布式配置中心,主要是通過版本控制器(git/svn)存儲配置文件信息,沒有后台
2,搭建springcloud-config 分布式配置中心

1,搭建碼雲(git),開源的git 服務器,創建賬號,創建倉庫,創建文件
https://gitee.com/aiyuesheng/springcloud-config/blob/master/config/config-client-dev.properties
這個放在git 上的配置文件信息,有參數age=10333
配置文件名:config-client-dev.properties
配置文件名稱規范:服務名-環境.properteis 例如開發環境是:config-client-dev.properties,生產環境:config-client-prd.properties
3, 搭建eureka 注冊中心,這個之前已經寫過,需要將springcloud-config 以及 配置中心的客戶端注冊上去
最后就是以下三個服務都起來,然后springcloud-config-client 通過springcloud-server 讀取git 上的配置文件

4,搭建springcloud-config(配置中心)
maven依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <!-- 管理依賴 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--spring-cloud 整合 config-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- SpringBoot整合eureka客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <!-- 注意: 這里必須要添加, 否者各種依賴有問題 --> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
application.yml: springcloud-config(配置中心) 這個服務注冊到eureka 上的別名:config-server, git環境地址,以及文件夾搜索配置文件信息都有
###服務注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
spring:
application:
####注冊中心應用名稱
name: config-server
cloud:
config:
server:
git:
###git環境地址 倉庫
uri: https://gitee.com/aiyuesheng/springcloud-config.git
####搜索目錄
search-paths:
- config
####讀取分支
label: master
####端口號
server:
port: 8888
啟動類:
@EnableEurekaClient @EnableConfigServer @SpringBootApplication public class ConfigApp { public static void main(String[] args) { SpringApplication.run(ConfigApp.class, args); } }
5,搭建springcloud-client 端,也就是正常的服務,需要從配置中心上面讀取配置文件信息
maven:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <!-- 管理依賴 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- SpringBoot整合Web組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <!-- SpringBoot整合eureka客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- actuator監控中心 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <!-- 注意: 這里必須要添加, 否者各種依賴有問題 --> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
配置文件信息:name:應用名稱,如果git 上沒有這個應用開頭的名字,會找不到,profile:dev:git 上配置文件的環境名,service-id:config-server, 是配置中心服務器注冊到eureka 上的別名
spring:
application:
####注冊中心應用名稱
name: config-client
cloud:
config:
####讀取后綴
profile: dev
####讀取config-server注冊地址
discovery:
service-id: config-server
enabled: true
#####eureka服務注冊地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
server:
port: 8882
#配置手動實時刷新
#managementendpoints.web.exposure.include=*
management:
endpoints:
web:
exposure:
include: "*"
測試類:
@Component @Data @RefreshScope public class Parameter { @Value("${age}") private String age; }
@RestController public class IndexService { @Autowired private Parameter parameter; @RequestMapping("/getAge") private String getAge() { System.out.println(parameter.getAge()); return parameter.getAge(); } }
啟動類:
@SpringBootApplication @EnableEurekaClient public class ConfigClientApp { public static void main(String[] args) { SpringApplication.run(ConfigClientApp.class, args); } }
測試完,可以讀取數據
5,刷新數據----手動刷新
如果git 上配置文件信息修改了,本地緩存的配置文件信息是不會立即刷新的。在上面的例子中,我將讀取的參數、,放入到了一個單獨的Parameter 中,加上了注解@RefreshScope,同時,需要客戶端需要加上actuator 監控中心
<!-- actuator監控中心 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
同時,配置文件增加嗎,每個接口都實時監控:
#配置手動實時刷新
#managementendpoints.web.exposure.include=*
management:
endpoints:
web:
exposure:
include: "*"
每次修改完畢,需要手動發送post 請求,我是在post man 上發送
http://127.0.0.1:8882/actuator/refresh
如果有更新,會有提示,沒有,則返回【】
再次刷新,配置文件信息,就刷新了
本來,我是將@RefreshScope 放入到了控制層的類上,但是就是讀取為null ,很坑。。。。。。
實時刷新采用SpringCloud Bus消息總線,可以實時刷新,但是影響性能。。。
