写在前面的文章
接下来通过一个简单的例子实现在 Nacos 中创建配置,在 SpringBoot 应用中加载 Nacos 配置并响应 Nacos 中的配置变化
第一步:进入 Nacos 管理界面,选择 配置管理 \> 配置列表
,点击右侧 +
号创建新配置
重要的配置项说明:
{项目名}.{配置格式}
的格式,本次填入 nacos-config-client.properties
DEFAULT_GROUP
,本次操作使用默认值properties
,本次操作使用默认值,如果要使用其它格式则需要在应用中进行相应地配置couse.title=nacos
第一步:创建一个 SpringBoot 应用,命名为 nacos-config-client
,保持跟上面的 DataId
一致
第二步:添加依赖
添加父依赖
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
<relativePath/>
parent>
添加依赖管理器
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.SR1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>0.2.2.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
dependencies>
本例并没有添加对 Nacos 服务注册发现模块的依赖,配置功能跟服务注册发现功能是完全分立的,可以独立使用。
第三步:配置
配置服务名称及 Nacos 地址
server.port=8083
spring.application.name=nacos-config-client
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name
配置成与 Nacos 中创建的DataId
一致
第四步:创建启动类,并提供一个对外接口
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Slf4j
@RestController
@RefreshScope
static class TestController {
@Value("${couse.title}")
private String title;
@GetMapping("/test")
public String hello() {
return title;
}
}
}
接口实现很简单,就是输出配置文件中的 couse.title
的内容
@Value
注解用于读取配置文件中的配置@RefreshScope
注解用于支持动态刷新配置内容,有了这个注解,在 Nacos 修改配置内容,@Value
就会及时读取到最新的内容第五步:启动应用
在启动日志最开始可以看到两行日志,说明已经成功从 Nacos 中加载配置,而且是在应用启动之前进行加载
Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}
访问接口 http://localhost:8083/test
,如果一切正常,则会输出 Nacos 中配置的 nacos
在 Nacos 管理后台修改配置内容为 couse.title=nacos changed
,再次访问接口,可以看到输出的结果也会相应改变。
查看日志,可以看到配置被重新加载
Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}
...
Refresh keys changed: [couse.title]
前面的例子要求 spring.application.name
配置成与 Nacos 中创建的 DataId
一致,只是为了采用默认配置,减少配置量。
通过自定义配置可以实现对任意名称的配置文件进行加载。
涉及配置项:
spring.application.name
值Nacos 采用 Group + DataId
进行配置文件定位,其中 DataId = {prefix}.{file-extension}
。
如下配置,则会加载 DEV_GROUP
分组下的 example.yaml
文件
spring.cloud.nacos.config.prefix=example
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.group=DEV_GROUP