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: true3.在nacos中创建配置文件
test-nacos-extension-config.properties
test-json=testJsonaccumulate-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"}'} 