以前Spring Cloud Config基礎篇這篇文章介紹了Spring Cloud Config 配置中心基礎的實現,今天繼續聊下Spring Cloud Config 並結合nacos作服務註冊中心,實現多項目、多配置文件、按項目目錄劃分等功能的配置服務中心。html
閱讀本篇文章以前,最好要有nacos基礎;關於nacos是什麼,如何使用,能夠參考個人上一篇文章 Spring Cloud Alibaba(一) 如何使用nacos服務註冊和發現,或者直接連接到官網教程Nacos 快速開始java
該項目用來作配置服務中心,如下貼出關鍵部分代碼git
pom.xmlgithub
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
application.ymlweb
server: port: 8001 spring: application: name: ali-nacos-config-server cloud: nacos: discovery: server-addr: localhost:8848 config: server: git: #uri: https://github.com/smltq/spring-boot-demo.git uri: https://gitee.com/tqlin/spring-boot-demo.git searchPaths: /cloud-alibaba/config-repo/{application}/ force-pull: true
啓動類AnConfigServerApplication.javaspring
@SpringBootApplication @EnableDiscoveryClient @EnableConfigServer public class AnConfigServerApplication { public static void main(String[] args) { SpringApplication.run(AnConfigServerApplication.class, args); } }
該項目用來作配置中心客戶端測試之一,如下貼出幾處關鍵代碼json
pom.xmlbootstrap
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> </dependencies>
bootstrap.ymlapp
spring: application: name: ali-nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: name: ${spring.application.name},myconfig uri: http://localhost:8001/ # config server 配置服務地址 profile: ${spring.profiles.active} label: master profiles: active: pro # 配置文件版本(該示例分爲test,dev,pro)
寫個配置讀取測試類HelloController.javaspring-boot
@RestController public class HelloController { @Value("${easy.hello}") private String hello; @Value("${easy.myconfig}") private String myconfig; @RequestMapping("/hello") public Map hello() { Map map = new HashMap<>(); map.put("hello", hello); map.put("myconfig", myconfig); return map; } }
啓動類AnConfigClientApplication.java
@SpringBootApplication @EnableDiscoveryClient public class AnConfigClientApplication { public static void main(String[] args) { SpringApplication.run(AnConfigClientApplication.class, args); } }
如下貼出調整部分代碼
pom.xml增長spring-cloud-starter-config依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>
yml配置文件增長bootstrap.yml,把核心配置移到該配置文件
bootstrap.yml
spring: application: name: ali-nacos-consumer-feign cloud: nacos: discovery: server-addr: localhost:8848 config: name: ${spring.application.name} uri: http://localhost:8001/ # config server 配置服務地址 profile: ${spring.profiles.active} label: master profiles: active: dev # 配置文件版本(該示例分爲test,dev,pro)
編寫配置讀寫測試類HomeController.java
@RestController @Slf4j public class HomeController { @Autowired private HelloService helloService; @Value("${easy.hello}") private String hello; @GetMapping(value = "/", produces = "application/json") public String home() { log.info("-----------------consumer調用開始-----------------"); String param = "雲天"; log.info("消費者傳遞參數:" + param); String result = helloService.hello(param); log.info("收到提供者響應:" + result); return "feign消費者" + result; } @RequestMapping("/hello") public Map hello() { Map map = new HashMap<>(); map.put("hello", hello); return map; } }
ali-nacos-config-server:配置服務中心,服務名:ali-nacos-config-server,端口:8001
ali-nacos-config-client:配置客戶端1(消費端),服務名:ali-nacos-config-client,端口:8002
ali-nacos-consumer-feign:配置客戶端2(消費端),服務名:ali-nacos-consumer-feign,端口:9101
首先要啓動服務註冊中心 nacos
{ name: "ali-nacos-config-client", profiles: [ "dev" ], label: null, version: "5456d7ca31d46e91464b6efd3a0831a8208413d9", state: null, propertySources: [ ] }
{ name: "ali-nacos-config-client", profiles: [ "test" ], label: null, version: "5456d7ca31d46e91464b6efd3a0831a8208413d9", state: null, propertySources: [ ] }
這表示配置能正確從git上加載到了。
{ hello: "ali-nacos-config-client 項目的 dev config", myconfig: "ali-nacos-config-client 項目的 myconfig config" }
{ hello: "ali-nacos-config-client 項目的 test config", myconfig: "ali-nacos-config-client 項目的 myconfig config" }
表示我git上該項目的2個配置文件都成功讀取到了。
訪問:http://localhost:9101/hello
返回結果
{ hello: "ali-nacos-consumer-feign 項目的 dev config" }
表示該項目的配置文件加載成功了