两种方式实现
加入配置pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1.实现Listener接口
package com.homepage.data.display.common.configbean;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.homepage.data.display.common.thread.pool.DashBoardThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.Executor;
@Configuration
public class SimpleNacosConfigListener implements InitializingBean {
private static final Logger logger = LoggerFactory
.getLogger(SimpleNacosConfigListener.class);
@Value("${spring.application.name}")
private String appName;
@Autowired
private DisplayAreaConfig displayAreaConfig;
@Autowired
private NacosConfigProperties configProperties;
@Autowired
private DashBoardThreadPool dashBoardThreadPool;
//@NacosInjected
//private ConfigService configService;需要引入
//<dependency>
// <groupId>com.alibaba.nacos</groupId>
// <artifactId>nacos-spring-context</artifactId>
// <version>1.0.0</version>
//</dependency>
@Autowired
private ConfigService configService;
@Bean
public ConfigService getConfigService() {
String serverAdder = configProperties.getServerAddr();
String nameSpace = configProperties.getNamespace();
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAdder);
properties.put(PropertyKeyConst.NAMESPACE, nameSpace);
ConfigService configService;
try {
configService = NacosFactory.createConfigService(properties);
} catch (NacosException e) {
e.printStackTrace();
throw new RuntimeException("Nacos config 配置 异常");
}
return configService;
}
@Override
public void afterPropertiesSet() throws Exception {
// Listener listener = new AbstractListener() {
// @Override
// public void receiveConfigInfo(String configInfo) {
// logger.info("监听数据变化 : {}", configInfo);
// logger.info("监听数据变化 : {}", displayAreaConfig);
// }
// };
System.out.println("displayAreaConfig####################"+displayAreaConfig);
System.out.println(
appName + "-"+configProperties.getExtConfig().get(0).getDataId()+"------"+configProperties.getExtConfig().get(0).getGroup()
);
String config = configService.getConfig(appName + "-" + configProperties.getExtConfig().get(0).getDataId(),
configProperties.getExtConfig().get(0).getGroup(), 3000L);
System.out.println("########config============"+config);
configService.addListener(appName+"-"+configProperties.getExtConfig().get(0).getDataId(),
configProperties.getExtConfig().get(0).getGroup(),
new Listener() {
@Override
public Executor getExecutor() {
return dashBoardThreadPool.getThreadPoolTaskExecutor();
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("configInfo===="+configInfo);
System.out.println("displayAreaConfig======"+displayAreaConfig);
}
});
}
}
bootstrap.properties
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.discovery.server-addr=${NACOS-ADDR:172.21.53.55:8848}
spring.cloud.nacos.discovery.namespace = 694de2ac-3931-48bb-966a-7a74f83a34aa
spring.cloud.inetutils.ignored-interfaces[0]=Virtual.*
spring.cloud.inetutils.ignored-interfaces[1]=VMware.*
spring.cloud.nacos.config.encode=utf-8
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
spring.cloud.nacos.config.namespace=${spring.cloud.nacos.discovery.namespace}
spring.cloud.nacos.config.enabled=true
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.ext-config[0].data-id=display-area.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.refreshable-dataids=${spring.application.name}
2.使用注解
pom中添加
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>1.0.0</version>
</dependency>
@Configuration
@EnableNacos(globalProperties = @NacosProperties(serverAddr ="${spring.cloud.nacos.discovery.server-addr}",
namespace = "${spring.cloud.nacos.discovery.namespace}"))
@NacosPropertySources({@NacosPropertySource(dataId =
"${spring.cloud.nacos.config.prefix}-${spring.cloud.nacos.config.ext-config[0].data-id}",autoRefreshed = true)})
public class AnnotationNacosListener {
private static final Logger logger = LoggerFactory
.getLogger(AnnotationNacosListener.class);
@Autowired
private DisplayAreaConfig displayAreaConfig;
@NacosConfigListener(dataId = "${spring.cloud.nacos.config.prefix}-${spring.cloud.nacos.config.ext-config[0].data-id}",converter = DisplayAreaConfig.class)
public void onReceived(DisplayAreaConfig areaConfig) {
logger.info("监听数据变化 : {}", displayAreaConfig);
logger.info("监听数据变化 : {}", areaConfig);
}
}
ConfigService
instance in your Spring Beans when @EnableNacos
is annotated, as shown below:
@EnableNacos(globalProperties = @NacosProperties(serverAddr ="${spring.cloud.nacos.discovery.server-addr}",
namespace = "${spring.cloud.nacos.discovery.namespace}"))