尝试了@RefreshScope无效(spring.cloud.nacos.config.refreshable-dataids未配置的dataid),依赖外部的jar包,版本信息:
<spring-cloud.version>Finchley.SR4</spring-cloud.version>
<nacos.version>0.2.2.RELEASE</nacos.version>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${nacos.version}</version>
</dependency>
package com.yile.app.config;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.client.config.listener.impl.PropertiesListener;
import humanize.time.PrettyTimeFormat;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Locale;
import java.util.Properties;
/**
* @author zcf
* @date 2019/10/10
* @description 配置
*/
@Component
public class NacosConfig implements InitializingBean {
public static final PrettyTimeFormat ChPrettyTimeFormat = new PrettyTimeFormat();
//region 接口
static final String DEFAULT_APPKEY = "demo";
static final String DEFAULT_APPSECRET = "123456";
/**
* AppKey
*/
public static String yileApiAppKey = "demo";
/**
* AppSecret
*/
public static String yileApiAppSecret = "123456";
public static final String ZCYAPI_GATEWAY = "http://api.yile.cn";
private static final String DEFAULT_GROUP = "DEFAULT_GROUP";
@Value("${spring.application.name}")
private String appName;
@Value("${spring.profiles.active:dev}")
private String profile;
@Value("${spring.cloud.nacos.config.file-extension:properties}")
private String extension;
@Value("${spring.cloud.nacos.config.server-addr}")
private String serverAddr;
@Autowired
NacosConfigProperties nacosConfigProperties;
/**
* AppKey配置
* @param key AppKey
*/
@Value("${yile.api.appkey:}")
public void setYileApiAppKey(String key)
{
if(StringUtils.isNotEmpty(key)) {
yileApiAppKey = key;
}
}
/**
* AppSecret配置
* @param secret AppSecret
*/
@Value("${yile.api.appsecret:}")
public void setYileApiAppSecret(String secret)
{
if(StringUtils.isNotEmpty(secret)) {
yileApiAppSecret = secret;
}
}
@Override
public void afterPropertiesSet() throws Exception {
ConfigService configService = NacosFactory.createConfigService(serverAddr);
configService.addListener(String.format("%s-%s.%s",appName,profile,extension),
DEFAULT_GROUP,
new PropertiesListener() {
@Override
public void innerReceive(Properties properties) {
String str = properties.getProperty("yile.api.appkey");
if(StringUtils.isNotBlank(str))
{
setYileApiAppKey(str);
}
else
{
setYileApiAppKey(DEFAULT_APPKEY);
}
str = properties.getProperty("yile.api.appsecret");
if(StringUtils.isNotBlank(str))
{
setYileApiAppSecret(str);
}
else
{
setYileApiAppSecret(DEFAULT_APPSECRET);
}
}
});
}
//endregion
}
bootstrap.yml
yile:
name: app-service
nacos:
server-addr: 192.168.1.109:8848
spring:
# zipkin:
# base-url: http://localhost:9411
application:
name: ${yile.name}
cloud:
nacos:
config:
server-addr: ${yile.nacos.server-addr}
shared-dataids: common.properties
refreshable-dataids: common.properties
discovery:
server-addr: ${yile.nacos.server-addr}
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*/*.xml,classpath*:mybatis/mapper/*.xml
其中:nacosConfigProperties(不为空)读取的是spring.cloud.nacos.config.shared-dataids设置的Data-Id
测试:
@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public Object test()
{
return NacosConfig.yileApiAppKey;
}
测试通过;