是否有可能@Lazy
初始化一个Spring@Value
?
e.g.
@Lazy
@Value("${someConfig}")
private String someConfig;
我特别提到的场景是通过 JNDI 设置的变量,并且一个嵌入式 Tomcat 容器,其中一些 JNDI 变量在 Spring Boot 加载期间初始化 https://stackoverflow.com/questions/28131577/spring-boot-using-embedded-tomcat-with-jndi...我可以想到您想要 JIT 变量填充的其他场景:检索变量“昂贵”,并且您不想影响启动时间,该变量在应用程序启动时不可用,等等。
上面的代码给出了以下错误:
java.lang.IllegalArgumentException:无法子类化最终类
java.lang.String
我想你可以通过使用来实现延迟加载变量@ConfigurationProperties bean https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties?
一个后续问题:可以/愿意@Value
- 如果底层变量源发生更改(例如服务器上的 JNDI),则初始化变量是否需要重新初始化(无需重新启动应用程序)?即重新检索
(我正在尝试最后两个场景)
您可以尝试这样的设置。缺点是它需要使用此变量的 bean 也声明为@Lazy
.
@Bean(name = "myVar")
@Lazy
String foo(@Value("${someConfig}") String someConfig) {
return someConfig;
}
@Component
@Lazy
class SomeComponent {
@Autowired
@Qualifier("myVar")
String myVar;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)