是否可以@Lazy
初始化@Value
?
e.g。
@Lazy
@Value("${someConfig}")
private String someConfig;
我特别指的是一个通过JNDI设置的变量,以及an embedded Tomcat container, which has some of it's JNDI variables initialised during Spring Boot loading ......我可以想到你想要JIT变量填充的其他场景:它& #39; s"昂贵"要检索变量并且您不想影响启动时间,该变量在应用程序启动时不可用等。
上面的代码给出了以下错误:
java.lang.IllegalArgumentException:无法继承最终类 java.lang.String中
我想你可以使用@ConfigurationProperties
bean?
后续问题:如果更改了基础变量源(例如服务器上的JNDI),可以/将@Value
- 初始化变量重新初始化(不重启应用)吗?即重新检索
(我正在尝试最后两种情况)
答案 0 :(得分:5)
您可以尝试这样的设置。缺点是它要求使用此变量的bean也声明为@Lazy
。
@Bean(name = "myVar")
@Lazy
String foo(@Value("${someConfig}") String someConfig) {
return someConfig;
}
@Component
@Lazy
class SomeComponent {
@Autowired
@Qualifier("myVar")
String myVar;
}