SAMLBootstrap bean 消除了来自云配置服务器的@Value 注入
SAMLBootstrap bean wipes out @Value injection from Cloud Config Server
当我 运行 我的应用程序时,metadataFile 在创建下面的 bean 时总是 null
。我有一个 Spring 云配置服务器,我看到它在我的断点之前被命中并且成功检索了 YML。
即使配置服务器关闭,SPEL 也应该提供默认值。有没有人 运行 进入 @Value
而不是在 @Bean
之前评估和注入值?我有很多年使用 XML 注释,所以也许我从来没有用注释驱动的配置来解决这个问题,但似乎很难相信我以前不会 运行 进入这个。很迷茫...
其中:
@Configuration
public class Test {
@Value("${someplace.saml.idp.metadata.file:'classpath:idp-metadata.xml'}")
String metadataFile;
@Bean
MetadataProvider metadataProvider() {
if(!StringUtils.isBlank(metadataFile) && metadataFile.startsWith("classpath:/")) {
// do some stuff
} else {
File metadatFile = new File(metadataFile);
}
}
更新:
为了简洁起见,我缩短了上面的示例。清除配置值的罪魁祸首是这个 SAMLBootstrap bean。注释配置的 Spring SAML2 似乎需要它。
@Bean
SAMLBootstrap samlBootstrap() {
return new SAMLBootstrap();
}
更新 2(解决方案):
SAMLBootstrap bean 需要用静态声明。我在另一个 post 的最后评论中发现了这一点:Spring Bean without id or name in Java Config
当我 运行 我的应用程序时,metadataFile 在创建下面的 bean 时总是 null
。我有一个 Spring 云配置服务器,我看到它在我的断点之前被命中并且成功检索了 YML。
即使配置服务器关闭,SPEL 也应该提供默认值。有没有人 运行 进入 @Value
而不是在 @Bean
之前评估和注入值?我有很多年使用 XML 注释,所以也许我从来没有用注释驱动的配置来解决这个问题,但似乎很难相信我以前不会 运行 进入这个。很迷茫...
其中:
@Configuration
public class Test {
@Value("${someplace.saml.idp.metadata.file:'classpath:idp-metadata.xml'}")
String metadataFile;
@Bean
MetadataProvider metadataProvider() {
if(!StringUtils.isBlank(metadataFile) && metadataFile.startsWith("classpath:/")) {
// do some stuff
} else {
File metadatFile = new File(metadataFile);
}
}
更新:
为了简洁起见,我缩短了上面的示例。清除配置值的罪魁祸首是这个 SAMLBootstrap bean。注释配置的 Spring SAML2 似乎需要它。
@Bean
SAMLBootstrap samlBootstrap() {
return new SAMLBootstrap();
}
更新 2(解决方案):
SAMLBootstrap bean 需要用静态声明。我在另一个 post 的最后评论中发现了这一点:Spring Bean without id or name in Java Config