当前位置:   article > 正文

基于Spring Cloud集成Nacos应用微服务注册与配置_spring.config.shared-configs

spring.config.shared-configs

记录:386

场景:在nacos中集中管理微服务配置,微服务在启动时,连接nacos读取配置到本地使用。在nacos中集中管理微服务注册,微服务在启动时,连接nacos并注册到其服务管理中。在微服务配置文件中只需写nacos配置和注册等少量配置。

官网:https://nacos.io/zh-cn/

源码:https://github.com/alibaba/Nacos

1.初始化准备

1.1准备nacos

Nacos版本:Nacos 2.1.1。

1.1.1启动和登录nacos

启动命令:sh startup.sh -m standalone

地址:http://127.0.0.1:8848/nacos

用户名/口令:nacos/nacos

1.1.2创建命名空间

命名空间ID:aa3eebb6-daa2-4db8-9a29-03dd8a17db15

命名空间名:hub

1.1.3创建配置

选中hub命名空间,创建配置。

(1)hub-example01-config.yml配置

Data ID:hub-example01-config.yml

Group:DEFAULT_GROUP

配置格式:YAML

配置内容:

  1. pring:
  2. main:
  3. allow-bean-definition-overriding: true
  4. server:
  5. max-http-header-size: 51200

(2)hub-example02-config.yml配置

Data ID:hub-example02-config.yml

Group:DEFAULT_GROUP

配置格式:YAML

配置内容:

  1. hub:
  2. example:
  3. cityName: '杭州'

1.2创建Maven工程

使用IntelliJ IDEA创建Maven工程。

(1)微服务名称

名称:hub-example-301-nacos

(2)微服务groupId和artifactId

groupId: com.hub

artifactId: hub-example-301-nacos

(3)微服务核心模块版本

  1. spring-boot 2.6.3
  2. spring-cloud 2021.0.1
  3. spring-cloud-alibaba 2021.0.1.0
  4. spring-framework 5.3.15

2.修改pom.xml

修改pom.xml,引入项目依赖Jar和管理Jar包。

2.1修改pom.xml文件

引入核心依赖包:

内容:

  1. <!--nacos注册中心-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. <version>2021.0.1.0</version>
  6. <exclusions>
  7. <exclusion>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  10. </exclusion>
  11. </exclusions>
  12. </dependency>
  13. <!--nacos配置中心-->
  14. <dependency>
  15. <groupId>com.alibaba.cloud</groupId>
  16. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  17. <version>2021.0.1.0</version>
  18. <exclusions>
  19. <exclusion>
  20. <groupId>com.alibaba.nacos</groupId>
  21. <artifactId>nacos-client</artifactId>
  22. </exclusion>
  23. </exclusions>
  24. </dependency>

2.2全量pom.xml文件

全量pom.xml文件请参考附录:1.8.1全量pom.xml文件

3.创建bootstrap.yml文件

在bootstrap.yml文件中配置nacos的配置和注册信息以及微服务端口等基础信息,其它配置均从nacos中读取。

3.1配置bootstrap.yml

文件名:../src/main/resources/bootstrap.yml

文件内容:

  1. server:
  2. port: 18301
  3. servlet:
  4. context-path: /hub-301-nacos
  5. spring:
  6. application:
  7. name: hub-example-301-nacos
  8. cloud:
  9. nacos:
  10. discovery:
  11. server-addr: 127.0.0.1:18848
  12. username: nacos
  13. password: nacos
  14. namespace: aa3eebb6-daa2-4db8-9a29-03dd8a17db15
  15. group: DEFAULT_GROUP
  16. config:
  17. server-addr: 127.0.0.1:18848
  18. username: nacos
  19. password: nacos
  20. namespace: aa3eebb6-daa2-4db8-9a29-03dd8a17db15
  21. group: DEFAULT_GROUP
  22. file-extension: yaml
  23. shared-configs:
  24. - dataId: hub-example01-config.yml
  25. group: DEFAULT_GROUP
  26. refresh: true
  27. - dataId: hub-example02-config.yml
  28. group: DEFAULT_GROUP
  29. refresh: true

3.2解析bootstrap.yml

(1)配置端口号和context-path,此项可选,不指定就会默认。

(2)配置微应用名称:hub-example-301-nacos,此项必须配置,因为注册微服务需用到微服务名称。

(3)nacos的注册在spring.cloud.nacos.discovery下的属性。

spring.cloud.nacos.discovery.server-addr,指定nacos地址。

spring.cloud.nacos.discovery.username,指定nacos名称。

spring.cloud.nacos.discovery.password,指定nacos密码。

spring.cloud.nacos.discovery.namespace,指定命名空间。

spring.cloud.nacos.discovery.group,指定group名称。

(4)nacos的配置在spring.cloud.nacos.discovery下的属性。

spring.cloud.nacos.config.server-addr,指定nacos地址。

spring.cloud.nacos.config.username,指定nacos名称。

spring.cloud.nacos.config.password,指定nacos密码。

spring.cloud.nacos.config.namespace,指定命名空间。

spring.cloud.nacos.config.group,指定group名称。

spring.cloud.nacos.config.file-extension,指定从nacos读取配置文件后缀。

spring.cloud.nacos.config.shared-configs,指定从nacos读取配置文件。

注意:spring.cloud.nacos.config.shared-configs属性是一个List属性,换句话说,就是可以读取多个配置文件。

在Java代码中类型:List<NacosConfigProperties.Config> sharedConfigs。

在bootstrap.yml配置文件中,以短横线-,开头代表是List类型。

(5)解析spring.cloud.nacos.config.shared-configs

nacos的spring.cloud.nacos.config.shared-configs是List属性。

例如:

  1. - dataId: hub-example01-config.yml
  2. group: DEFAULT_GROUP
  3. refresh: true

解析:-,代表是List类型。dataId,指定nacos中的文件名。group,指定文件所在组。refresh,指定是否刷新,true,刷新,false,不刷新,换句话说,就是微服务能实时刷新nacos中的配置,达到同步效果。

4.创建启动类

4.1创建包

com.hub.example.domain:微服务使用到的DTO等实体类。

com.hub.example.controller:Controller类,发布Restful接口。

4.2启动类

包名:com.hub.example。

启动类:HubExampleNacosApplication。

(1)内容

  1. @SpringBootApplication
  2. @ComponentScan(basePackages = "com.hub.example.*")
  3. public class HubExampleNacosApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(HubExampleNacosApplication.class, args);
  6. }
  7. }

(2)解析

@SpringBootApplication,SpringBoot标记启动类的注解。

@ComponentScan,扫描指定的包,将组件加载到IOC容器中。

5.编写Controller代码

5.1Controller代码

  1. @RestController
  2. @RequestMapping("/hub/example/city")
  3. @RefreshScope
  4. public class CityController {
  5. @Value("${hub.example.cityName}")
  6. private String cityName;
  7. @PostMapping("/queryCityByCityId")
  8. public ResultObj<CityDTO> queryCityByCityId(String cityId) {
  9. CityDTO cityDTO = new CityDTO();
  10. cityDTO.setCityId(cityId != null ? Long.parseLong(cityId) : 1L);
  11. cityDTO.setCityName(cityName);
  12. cityDTO.setUpdateTime(new Date());
  13. return ResultObj.data(200, cityDTO, "执行成功");
  14. }
  15. }

5.2解析Controller代码

@Value("${hub.example.cityName}"):从nacos的hub-example02-config.yml配置中读取配置信息。

@RefreshScope:此注解会激活@Value实时从配置文件中取值,只要对应配置有变化,达到同步效果。

6.支撑对象

6.1CityDTO

  1. @Data
  2. public class CityDTO implements Serializable {
  3. private Long cityId;
  4. private String cityName;
  5. private Double landArea;
  6. private Long population;
  7. private Double gross;
  8. private String cityDescribe;
  9. private String dataYear;
  10. @JsonFormat(
  11. pattern = "yyyy-MM-dd HH:mm:ss"
  12. )
  13. private Date updateTime;
  14. }

6.2ResultObj

  1. @Data
  2. public class ResultObj<T> implements Serializable {
  3. private int code;
  4. private boolean success;
  5. private String msg;
  6. private T data;
  7. private ResultObj(int code, T data, String msg) {
  8. this.code = code;
  9. this.data = data;
  10. this.msg = msg;
  11. this.success = code == 200;
  12. }
  13. public static <T> ResultObj<T> data(int code, T data, String msg) {
  14. return new ResultObj<>(code, data, msg);
  15. }
  16. }

7.使用Postman工具测试

使用Postman工具测试。

测试地址:http://127.0.0.1:18301/hub-301-nacos/hub/example/city/queryCityByCityId

测试入参:cityId=20230322

返回结果:

  1. {
  2. "code": 200,
  3. "success": true,
  4. "msg": "执行成功",
  5. "data": {
  6. "cityId": 20230322,
  7. "cityName": "杭州",
  8. "landArea": null,
  9. "population": null,
  10. "gross": null,
  11. "cityDescribe": null,
  12. "dataYear": null,
  13. "updateTime": "2023-03-22 21:21:55"
  14. }
  15. }

8.附录

8.1全量pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.hub</groupId>
  7. <artifactId>hub-example-301-nacos</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.6.3</version>
  13. </parent>
  14. <description>集成nacos框架应用</description>
  15. <packaging>jar</packaging>
  16. <properties>
  17. <maven.compiler.source>1.8</maven.compiler.source>
  18. <maven.compiler.target>1.8</maven.compiler.target>
  19. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  20. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  21. <spring.boot.maven.plugin.version>2.6.3</spring.boot.maven.plugin.version>
  22. <spring.boot.version>2.6.3</spring.boot.version>
  23. <spring.cloud.version>2021.0.1</spring.cloud.version>
  24. <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
  25. <nacos.client.version>2.1.1</nacos.client.version>
  26. <lombok.version>1.18.24</lombok.version>
  27. <guava.version>30.1-jre</guava.version>
  28. </properties>
  29. <dependencyManagement>
  30. <dependencies>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-parent</artifactId>
  34. <version>${spring.boot.version}</version>
  35. <type>pom</type>
  36. <scope>import</scope>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.cloud</groupId>
  40. <artifactId>spring-cloud-dependencies</artifactId>
  41. <version>${spring.cloud.version}</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. <dependency>
  46. <groupId>com.alibaba.cloud</groupId>
  47. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  48. <version>${spring.cloud.alibaba.version}</version>
  49. <type>pom</type>
  50. <scope>import</scope>
  51. </dependency>
  52. </dependencies>
  53. </dependencyManagement>
  54. <dependencies>
  55. <dependency>
  56. <groupId>org.springframework.boot</groupId>
  57. <artifactId>spring-boot-starter</artifactId>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-starter-web</artifactId>
  62. </dependency>
  63. <dependency>
  64. <groupId>org.springframework.cloud</groupId>
  65. <artifactId>spring-cloud-starter-bootstrap</artifactId>
  66. </dependency>
  67. <!--nacos注册中心-->
  68. <dependency>
  69. <groupId>com.alibaba.cloud</groupId>
  70. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  71. <exclusions>
  72. <exclusion>
  73. <groupId>org.springframework.cloud</groupId>
  74. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  75. </exclusion>
  76. </exclusions>
  77. </dependency>
  78. <!--nacos配置中心-->
  79. <dependency>
  80. <groupId>com.alibaba.cloud</groupId>
  81. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  82. <exclusions>
  83. <exclusion>
  84. <groupId>com.alibaba.nacos</groupId>
  85. <artifactId>nacos-client</artifactId>
  86. </exclusion>
  87. </exclusions>
  88. </dependency>
  89. <dependency>
  90. <groupId>com.alibaba.nacos</groupId>
  91. <artifactId>nacos-client</artifactId>
  92. <version>${nacos.client.version}</version>
  93. </dependency>
  94. <dependency>
  95. <groupId>org.projectlombok</groupId>
  96. <artifactId>lombok</artifactId>
  97. <version>${lombok.version}</version>
  98. </dependency>
  99. <dependency>
  100. <groupId>com.google.guava</groupId>
  101. <artifactId>guava</artifactId>
  102. <version>${guava.version}</version>
  103. </dependency>
  104. </dependencies>
  105. <build>
  106. <finalName>${project.artifactId}</finalName>
  107. <plugins>
  108. <plugin>
  109. <groupId>org.springframework.boot</groupId>
  110. <artifactId>spring-boot-maven-plugin</artifactId>
  111. <version>${spring.boot.maven.plugin.version}</version>
  112. <configuration>
  113. <fork>true</fork>
  114. <addResources>true</addResources>
  115. </configuration>
  116. <executions>
  117. <execution>
  118. <goals>
  119. <goal>repackage</goal>
  120. </goals>
  121. </execution>
  122. </executions>
  123. </plugin>
  124. </plugins>
  125. </build>
  126. </project>

以上,感谢。

2023年3月22日

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/182383
推荐阅读
相关标签
  

闽ICP备14008679号