@NacosValue注解获取不到配置信息怎么办?

@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "example", autoRefreshed = true, type = ConfigType.JSON)

配置nacos后,使用@NacosValue获取不到配置信息,但是使用spring提供的@Value可以获取到配置信息

阅读 32.7k
1 个回答
新手上路,请多包涵

我服了,为了回答你这个问题,我还得注册个账号,下次能不能换个地方问,你说的这个问题我也遇到了,下边我详细说一下,看看咱2的问题是不是一样的。
在我下边的代码里,@Value可以拿到值, @NacosValue拿不到值,但是我可以确定我的nacos配置生效了。
1.我的spring boot web启动端口配置在nacos上,本地配置文件没有设置启动端口,程序启动的时候端口生效了。
2.我用的不是nacos原生,而是用的spring-cloud-starter-alibaba-nacos-config
maven依赖如下

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

3.这个是重点,我以为正常应该用@NacosValue来获取配置,只是因为阿里适配了Spring所以我用@Value也能拿到值,但是我错了,下边是阿里官网的说明
After completing the above two steps, the application will get the externalized configuration from Nacos Server and put it in the Spring Environment's PropertySources.We use the @Value annotation to inject the corresponding configuration into the userName and age fields of the SampleController, and add @RefreshScope to turn on dynamic refresh .
所以按照阿里官网的意思,正常就应该用@Value而不应该用@NacosValue,而且他们官网的例子里写的也是@Value。当然,如果你用的不是spring-cloud-starter-alibaba-nacos-config,那说明咱2的问题还不一样,总之我不再纠结这个问题了,虽然我还是认为这本身是一个BUG

@RestController
public class HelloController {
    @Value("${version:v_1}")
    private String version;

    @NacosValue("${version}")
    private String version2;

    @GetMapping("/getVersion")
    public String getVersion() {
        return version + "," + version2;
    }

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏