Nacos官方中文文档:https://nacos.io/zh-cn/docs/quick-start.html
说明
阿里的官方文档比较坑,Springboot整合Nacos根本跑不起来。
在网上参考这篇文章搭建的案例:https://blog.csdn.net/xp_lx1/article/details/106063542
1. 案例代码
pom.xml - 依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>mynacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mynacos</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.boot.version>2.1.0.RELEASE</spring.boot.version>
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<!-- 定义Srping Boot版本和alibaba cloud版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 注册中心需要引入的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心需要引入的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Srping Boot 打包工具 打包成可执行的jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
bootstrap.yml
这个配置文件的加载顺序优于application.yml
server:
port: 8070
spring:
application:
name: service-provider
cloud:
nacos:
config:
# 配置中心地址配置
server-addr: 123.57.128.96:8848
# 定义配置文件后缀为.properties, dataId=${spring.application.name}-${spring.profiles.active}.properties
file-extension: properties
# 定义配置中心分组:
group: dev
discovery:
# 注册中心地址配置
server-addr: 123.57.128.96:8848
profiles:
# 定义环境为dev
active: dev
测试类 TestController
@RestController
@RefreshScope //需要热更新配置的类,添加该注解。
public class TestController {
@Value(value = "${test.logo}")
String logo;
@RequestMapping("/logo")
public Object getLogo() {
return logo;
}
}
2. Nacos添加项目配置
添加配置要注意:
- GROUP:配置分组,说明该配置所属环境,可以将开发、测试、生产环境的分组定义为:dev、test、pro。取自${spring.cloud.nacos.config.group}
- Data ID:项目关联配置的关键。项目启动后会根据bootstrap.yml中的配置来关键配置中心
Data ID与bootstrap.yml关系:
- service-provider:取自${spring.application.name}
- dev:取自${spring.profiles.active}
- properties:取自${spring.cloud.nacos.config.file-extension}
新建配置
3. 项目启动与测试
1. Nacos添加配置后,启动测试:
测试结果:读取配置正常
2. 修改配置 test.logo=99,验证配置热更新:
以下为Nacos配置变更后,控制台的实时输出
2020-12-11 15:24:59.242 INFO 40956 --- [.57.128.96_8848] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-12-11 15:24:59.987 INFO 40956 --- [.57.128.96_8848] c.a.c.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: 'service-provider-dev.properties', group: 'dev'
2020-12-11 15:24:59.987 INFO 40956 --- [.57.128.96_8848] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='service-provider-dev.properties'}, NacosPropertySource {name='service-provider.properties'}]}
2020-12-11 15:24:59.990 INFO 40956 --- [.57.128.96_8848] o.s.boot.SpringApplication : The following profiles are active: dev
2020-12-11 15:25:00.013 INFO 40956 --- [.57.128.96_8848] o.s.boot.SpringApplication : Started application in 1.515 seconds (JVM running for 2865.009)
2020-12-11 15:25:00.131 INFO 40956 --- [.57.128.96_8848] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [test.logo]
再次访问,配置已更新:
4. 注意事项,细节说明
- bootstrap.yml 里定义的配置文件后缀如果是properties,在Nacos新建配置时,配置格式必须也得是Properties。如果不一致,用yaml格式,那会读取不到配置。
- @RefreshScope 注解必须添加到有热刷新需求的类上,而不能加到启动类上。我猜这样做的目的是,防止配置全局热刷新,而只给需要的配置刷新。
5. 关闭Nacos
关闭Nacos服务后,控制台并没有异常输出,项目访问也正常。配置中心挂了并不影响已启动项目的运行,至此验证结束。