天天看点

SpringBoot中@Value读取不到值的解决方案但是都没用

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!

该问题的出现方式很多,我碰到该问题的场景是使用RMQ,在使用RMQ是,创建了一个生产者,配置了很多方案都没有办法读取到值

使用技术

SpringBoot + RMQ

出问题的地方

创建了一个生产者,生产者的地址和topic都配置到了properties中,以键值对的形式存在。

关键代码

public class producer{
@Value(${"toppic"})
private String topic;

@Value(${"address"})
private String address;


private void send(){
    
}
……
}

// 调用代码
Producer p = new Producer();
p.send()
           

尝试的方式:

  • 1、第一种方式:对topic加上static
  • 2、第二种方式:将topic加上get/set
  • 3、第三种方式:加上@Compement

但是都没用

解决方案:调用代码删除掉new 对象操作,使用@autowrite注入,然后用注入对象直接调用send().

出现这个问题的原因

该生产者对象,在SpringBoot启动到时候已经被加载了,@Value在启动的时候已经读取到了值,加载出来的对象和值都存放在了SpringBoot容器当中,当我们使用new 操作的时候,就重置了一个对象,并没有使用容器当中的对象,自然没有办法直接读取配置文件,所以使用send()的时候,直接在使用空值,所以一直读取不到。

总结

注意调用方式、观察@Value是否有被初始化、了解bean的加载和配置的加载流程