正常情况:
一般使用@value("${}")时:
这样写是可以正常从配置文件中获取到值的。
特殊情况一:(给静态变量加载配置文件值)
这种情况给静态变量赋值时启动也不会报错,但是取不到值,取出来的都是null。
使用下set方法进行赋值如下:
这里的set方法不要有static不然依旧取不到,后面的入参随意,这样就可以给静态变量从配置文件获取并赋值了。
但是,原其他路径都为静态变量,在加载时,优先运行,运行结束后才运行非静态set方法,无法拿到预期值
经过一系列的查询发现@PostConstruct这个注解可以解决这个问题。
注解使用场景: 在项目中主要是在Servlet初始化之前加载一些缓存数据等
特点:
-
只有一个非静态方法能使用此注解
-
被注解的方法不得有任何参数
-
被注解的方法返回值必须为void
-
被注解方法不得抛出已检查异常
-
此方法只会被执行一次
例子:
@Component
@PropertySource("classpath:application.properties")
public class JmsConfig {
@Value("${NAME.SERVER.ADDR}")
private String caddr;
@Value("${TOPIC}")
private String cTopic;
public static String NAME_SERVER_ADDR ;
public static String TOPIC;
@PostConstruct
public void readConfig(){
NAME_SERVER_ADDR = caddr;
TOPIC = cTopic;
}
}
这样就达到了在静态变量初始化时就将配置文件中对应的值传入。
暂时这么多,后续发现了其他问题再补充。