Refresh keys changed: [] 2023.0.3.3 问题排查
最近在配置新的nacos。nacos在java中的自动刷新不好用了。
排查问题发现,是因为2023.0.3.3版本和之前版本的依赖有不同。
那么我现在的依赖是这样的。
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.4.2</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2023.0.3.3</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2023.0.3.3</version></dependency>
需要注意的是:
不要依赖
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
如果依赖spring-cloud-starter-bootstrap的话,会导致nacos刷新的时候,程序无法感知到具体的key变化。
下面把整体的依赖和代码贴一下。
首先是配置文件:
这里要注意,2023.0.3.3需要使用 spring.config.import
spring.application.name=demo-nacos
# nacos config
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f0740095-b107-4271-8ed0-2c7e9c5c8554
spring.cloud.nacos.config.file-extension=properties
# nacos discovery
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=xxxx0234-2345hkkjas-2342j34
#加载配置列表
spring.config.import=optional:nacos:${spring.application.name}.properties,optional:nacos:otherconfig-dev.properties
maven依赖
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.4.2</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2023.0.3.3</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2023.0.3.3</version></dependency>
ackage org.example.demonacos.nacos;import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Slf4j
@Data
@Component
@RefreshScope
public class DynamicConfigByValue {@Value("${abc:}")private String name;}
package org.example.demonacos.controller;import lombok.extern.slf4j.Slf4j;
import org.example.demonacos.nacos.DynamicConfigByValue;
import org.springframework.beans.factory.annotation.Autowired;
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;@Slf4j
@RestController
@RequestMapping("/first")
@RefreshScope
public class FirstController {@Autowiredprivate DynamicConfigByValue dynamicConfigByValue;@GetMapping("/get2")public String get2() {log.info("name: {}", dynamicConfigByValue.getName());return dynamicConfigByValue.getName();}
}
运行后效果
如果有其他问题,可以给我留言。