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的加载和配置的加载流程