以前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" }
表示该项目的配置文件加载成功了