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\"}"

/images/springboot/springboot-nacos-2.jpg

/images/springboot/springboot-nacos-1.jpg

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的配置

修改配置不去重启服务访问接口的结果

/images/springboot/springboot-nacos-3.jpg

修改nacos中的配置

/images/springboot/springboot-nacos-4.jpg

第二次刷新结果

/images/springboot/springboot-nacos-5.jpg

控制台日志:

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

/images/springboot/springboot-nacos-6.jpg

修改配置后访问:

/images/springboot/springboot-nacos-7.jpg

控制台日志:

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"}'} 
0%