Springboot集成nacos动态配置
目录
使用nacos作为配置中心
1.添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.配置文件
bootstrap.yaml
server:
port: 8082
spring:
application:
name: accumulate-admin
cloud:
nacos:
# 配置中心
config:
server-addr: localhost:8848
file-extension: yaml
refresh: true
# 共享配置
shared-configs[0]:
data-id: accumulate-common.yaml
refresh: true
# 扩展配置将动态配置的data-id配置在这里
extension-configs[0]:
data-id: test-nacos-extension-config.properties
refresh: true
extension-configs[1]:
data-id: accumulate-admin-common.yaml
refresh: true
3.在nacos中创建配置文件
test-nacos-extension-config.properties
test-json=testJson
accumulate-admin-common.yaml
common:
version: "1.0.1"
env: "test1"
isOpen: "false"
myConfig: "{\"version\":\"version_4527451f5aa3\",\"env\":\"env_bb913140755f\",\"isOpen\":false,\"myConfig\":\"myConfig_9652bd371cdd\"}"
4.编写测试类
package cn.com.accumulate.admin.controller.nacos;
import cn.com.accumulate.admin.config.nacosconfig.AccumulateAdminNacosConfig;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 紫滨
* @date 2025/1/20
*/
@Tag(name = "测试nacos配置控制器")
@RequestMapping("/nacos")
@RestController
@RefreshScope
@RequiredArgsConstructor
public class TestNacosConfigController {
private final AccumulateAdminNacosConfig accumulateAdminNacosConfig;
private final Logger log = LoggerFactory.getLogger(TestNacosConfigController.class);
@Value("${test-json}")
private String test;
@GetMapping("/test")
public String test() {
return "nacos配置测试:" + test;
}
@GetMapping("/getConfig")
public String getConfig() {
if(accumulateAdminNacosConfig != null && "true".equals(accumulateAdminNacosConfig.getIsOpen())) {
log.info("nacos配置测试:{}", accumulateAdminNacosConfig);
}
return "nacos配置测试:" + accumulateAdminNacosConfig.toString();
}
}
方式一:通过@Value+@RefreshScope注解获取配置
在 TestNacosConfigController
类上添加@RefreshScope
注解 并在 TestNacosConfigController
类中添加 @Value("${test-json}")
注解,获取配置中心的test-nacos-extension-config.properties
的配置
修改配置不去重启服务访问接口的结果
修改nacos中的配置
第二次刷新结果
控制台日志:
2025-01-20 17:13:58.549 INFO 79125 --- [listener.task-0] o.s.boot.SpringApplication logStartupProfileInfo 668 : The following 1 profile is active: "test"
2025-01-20 17:13:58.551 INFO 79125 --- [listener.task-0] o.s.boot.SpringApplication logStarted 56 : Started application in 0.472 seconds (process running for 71.877)
2025-01-20 17:13:58.584 INFO 79125 --- [listener.task-0] o.s.c.e.event.RefreshEventListener handle 73 : Refresh keys changed: [test-json]
方式二:通过@ConfigurationProperties注解获取配置(推荐)
编写配置类 AccumulateAdminNacosConfig
package cn.com.accumulate.admin.config.nacosconfig;
import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author 紫滨
* @date 2025/1/20
*/
@Data
@Component
@ConfigurationProperties(prefix = "common")
@NacosConfigurationProperties(
dataId = "accumulate-admin-common.yaml",
autoRefreshed = true)
public class AccumulateAdminNacosConfig {
private String version;
private String env;
private String isOpen;
private String myConfig;
@Override
public String toString() {
return "AccumulateAdminNacosConfig{" +
"version='" + version + '\'' +
", env='" + env + '\'' +
", isOpen=" + isOpen +
", myConfig='" + myConfig + '\'' +
'}';
}
}
访问接口:http://localhost:8082/api/v1/admin/nacos/getConfig
修改配置后访问:
控制台日志:
2025-01-20 17:18:43.145 INFO 79125 --- [listener.task-0] o.s.boot.SpringApplication logStartupProfileInfo 668 : The following 1 profile is active: "test"
2025-01-20 17:18:43.147 INFO 79125 --- [listener.task-0] o.s.boot.SpringApplication logStarted 56 : Started application in 0.506 seconds (process running for 356.476)
2025-01-20 17:18:43.169 INFO 79125 --- [listener.task-0] o.s.c.e.event.RefreshEventListener handle 73 : Refresh keys changed: [common.isOpen]
2025-01-20 17:18:48.721 INFO 79125 --- [io-8082-exec-10] c.c.a.a.c.n.TestNacosConfigController getConfig 40 : nacos配置测试:AccumulateAdminNacosConfig{version='1.0.1', env='test1', isOpen=true, myConfig='{"version":"version_4527451f5aa3","env":"env_bb913140755f","isOpen":false,"myConfig":"myConfig_9652bd371cdd"}'}