先容
之前Spring Cloud Config基础篇这篇文章先容了Spring Cloud Config 设置中心基础的实现,本日继续聊下Spring Cloud Config 并联合nacos做服务注册中心,实现多项目、多设置文件、按项目目录分别等功能的设置服务中心。
阅读本篇文章之前,最好要有nacos基础;关于nacos是什么,如何使用,可以参考我的上一篇文章 Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现,大概直接链接到官网教程Nacos 快速开始
本示例紧张内容
- 采用nacos做服务注册中心,Spring Cloud Config做设置服务中心,在上一篇基础上新建了ali-nacos-config-server设置服务中心项目、ali-nacos-config-client设置客户端项目、并把ali-nacos-consumer-feign设置也调整成从设置中心加载设置
- 支持多项目,config-repo设置文件目录按项目名称来规划,在设置中心 searchPaths: /cloud-alibaba/config-repo/{application}/ 使用application自动辨认查找目录
- 支持单项目多设置文件,ali-nacos-config-client项目的设置文件 spring.cloud.config.name=${spring.application.name},myconfig,通过指定多个name实现多设置文件
实现示例过程
新建ali-nacos-config-server项目
该项目用来做设置服务中心,以下贴出关键部分代码
pom.xml - <code> <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></code>
复制代码application.yml - <code>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</code>
复制代码启动类AnConfigServerApplication.java - <code>@SpringBootApplication
- @EnableDiscoveryClient
- @EnableConfigServer
- public class AnConfigServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(AnConfigServerApplication.class, args);
- }
- }</code>
复制代码新建ali-nacos-config-client项目
该项目用来做设置中心客户端测试之一,以下贴出几处关键代码
pom.xml - <code> <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></code>
复制代码bootstrap.yml - <code>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)</code>
复制代码写个设置读取测试类HelloController.java - <code>@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;
- }
- }</code>
复制代码启动类AnConfigClientApplication.java - <code>@SpringBootApplication
- @EnableDiscoveryClient
- public class AnConfigClientApplication {
- public static void main(String[] args) {
- SpringApplication.run(AnConfigClientApplication.class, args);
- }
- }</code>
复制代码调整ali-nacos-consumer-feign项目
以下贴出调整部分代码
pom.xml增加spring-cloud-starter-config依赖 - <code> <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></code>
复制代码yml设置文件增加bootstrap.yml,把核心设置移到该设置文件
bootstrap.yml - <code>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)</code>
复制代码编写设置读写测试类HomeController.java - <code>@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;
- }
- }</code>
复制代码末了放上设置文件目录规划
config-repo设置总目录
ali-nacos-config-server 项目GIT的设置目录
ali-nacos-consumer-feign 项目GIT的设置目录
使用示例
在上一篇基础上,我们新建了2个项目,并调整ali-nacos-consumer-feign项目使它支持设置长途读取,有以下三个项目做测试。
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
启动ali-nacos-config-server服务,设置服务中心测试
- 访问:http://localhost:8001/ali-nacos-config-client/dev ,返回:
- <code>{
- name: "ali-nacos-config-client",
- profiles: [
- "dev"
- ],
- label: null,
- version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
- state: null,
- propertySources: [ ]
- }</code>
复制代码
- 访问:http://localhost:8001/ali-nacos-config-client/test ,返回:
- <code>{
- name: "ali-nacos-config-client",
- profiles: [
- "test"
- ],
- label: null,
- version: "5456d7ca31d46e91464b6efd3a0831a8208413d9",
- state: null,
- propertySources: [ ]
- }</code>
复制代码这表示设置能正确从git上加载到了。
启动ali-nacos-config-client服务,运行客户端测试1
- bootstrap.yml的active调成dev,访问:http://localhost:8002/hello ,返回:
- <code>{
- hello: "ali-nacos-config-client 项目的 dev config",
- myconfig: "ali-nacos-config-client 项目的 myconfig config"
- }</code>
复制代码
- bootstrap.yml的active调成test,访问:http://localhost:8002/hello ,返回:
- <code>{
- hello: "ali-nacos-config-client 项目的 test config",
- myconfig: "ali-nacos-config-client 项目的 myconfig config"
- }</code>
复制代码表示我git上该项目的2个设置文件都成功读取到了。
启动ali-nacos-consumer-feign项目,测试客户端测试2
访问:http://localhost:9101/hello
返回结果 - <code>{
- hello: "ali-nacos-consumer-feign 项目的 dev config"
- }</code>
复制代码表示该项目的设置文件加载成功了
资料
- Spring Cloud Alibaba 示例源码
- 原文地址
来源:https://www.cnblogs.com/tqlin/p/11725487.html |