SpringBoot интегрирует Nacos для динамического чтения файлов конфигурации и обнаружения сервисов.

1. Интегрируйте Nacos

1) Настройте файл pom

        <!--nacos-config 版本号和springboot对应-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--nacos-discovery 版本号和springboot对应-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--nacos-web 需要此依赖,不然服务列表里面服务注册不成功-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2) Изменить файл конфигурации

nacos по умолчанию читает файл bootstrap.xml

spring:
  application:
    name: test-server-tcp
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        namespace: ${spring.profiles.active}
        server-addr: 192.168.0.1:8848
      config:
        namespace: ${spring.profiles.active}
        server-addr: 192.168.0.1:8848
        ext-config:
          - data-id: test-server-tcp.yml
            group: ${spring.profiles.active}
            refresh: true

3) Настройте интерфейс управления nacos

    1. Создайте новое пространство имен

   2. Создайте новый файл конфигурации

 

 

Во-вторых, конфигурация динамического чтения меняется

Добавьте аннотацию @RefreshScope к классу, который должен ссылаться на конфигурацию.

Образец кода:

@RefreshScope
@RestController
@RequestMapping(value="/config")
public class NacosConfig {

    @Value(value = "${nacos.test-name}")
    private String testName;
    @Value(value = "${nacos.test-port}")
    private String testPort;

    @GetMapping(value = "/get")
    public String getConfig(){
        return "name: "+ testName +";" + "port: "+ testPort +";";
    }

}

Вы можете проверить, действует ли динамическая конфигурация через URL-адрес http

3. После изменения динамической конфигурации задача синхронизации не выполняется.

Проблема: В программе есть запланированные задачи.Если конфигурация, считываемая запланированными задачами, изменяется динамически, то запланированные задачи выполняться не будут.

Причина: метод ленивой загрузки для запланированной задачи для чтения файла конфигурации

Решение: Реализуйте интерфейс в классе, где находится запланированная задача.

ApplicationListener<RefreshScopeRefreshedEvent> и реализовать его метод, просто пустой метод

 

PS: Все классы, которые используют временные задачи в программе, должны реализовывать вышеуказанный интерфейс.

Supongo que te gusta

Origin blog.csdn.net/mawei7510/article/details/126585547
Recomendado
Clasificación