源码地址:廖定贵/nacos-demo
1、pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nacos</groupId>
<artifactId>nacos-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>nacos-demo</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<!-- <version>8.5.6</version>-->
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- <version>2.7.12</version>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <version>2.7.12</version>-->
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!-- <version>2.2.2.RELEASE</version>-->
<!-- </dependency>-->
<!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.13.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-properties</artifactId>
<version>2.13.5</version>
</dependency>
</dependencies>
</project>
2、bootstrap.yml
spring:
application:
name: liao #为服务名
cloud:
nacos:
username: nacos
password: nacos
# discovery:
# namespace: monitor
# group: monitor
# server-addr: localhost:8848
config:
import-check:
enabled: false
file-extension: yaml #后缀名,只支持 properties 和 yaml 类型
prefix: my-nacos.yml #文件名,如果没有配置则默认为 ${spring.appliction.name}
# namespace: monitor
auto-refresh: true
enable-remote-sync-config: true #启用远程同步配置,
timeout: 3000
group: DEFAULT_GROUP #配置组
refresh-enabled: true
server-addr: localhost:8848
server:
port: 8080
3.监听器代码
此处用到的ConfigService由SpringCloudAlibaba框架创建,也可以自己创建一个ConfigService配置
package com.nacos.nacos;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.client.config.listener.impl.PropertiesListener;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Properties;
@Component
public class MyNacosConfigListener implements ApplicationRunner {
@Resource
private NacosConfigManager nacosConfigManager;
@Value("${spring.cloud.nacos.config.group}")
private String groupId;
public static final String DATA_ID = "my-nacos.yml";
@Value("${nacos.test}")
private String current;
private static YAMLMapper yamlMapper = new YAMLMapper();
//
private static JavaPropsMapper javaPropsMapper = new JavaPropsMapper();
@Override
public void run(ApplicationArguments args) throws Exception {
listenerNacosConfig();
}
/**
* 监听数据源变化
*
* @throws Exception 异常
*/
private void listenerNacosConfig() throws Exception {
ConfigService configService = nacosConfigManager.getConfigService();
configService.addListener(DATA_ID, groupId, new PropertiesListener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("改变前"+current);
try {
JsonNode jsonNode = yamlMapper.readTree(configInfo);
Properties properties = javaPropsMapper.writeValueAsProperties(jsonNode);
String property = properties.getProperty("nacos.test");
current = property;
System.out.println("改变后"+current);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void innerReceive(Properties properties) {
System.out.println(properties);
}
});
}
}