在所有Spring Boot云自动配置完成后,我需要延迟我的应用程序“服务”bean处理。
“service”bean依赖于SQL DataSource
和其他Bean
(S3存储库),这是可选的,可以基于云服务配置或直接配置的属性创建(甚至不在所有)。底层S3和SQL服务都基于各种外部条件完美配置。它们在直接,不正确的属性,云等方面表现良好。
所以现在我有类似......
@Autowired(required=false)
S3Storage s3;
@Autowired
SQLDatabase db;
@Bean
MyService myservice() {
if (s3 != null) {
return new SQLWithS3Implementation(db, s3);
} else {
return new SQLImplementation(db);
}
}
我对此Bean
做了什么,所以在使用cloud
服务(使用spring-cloud-connectors
)之前没有处理它,而s3还是null?
我需要像...这样的东西。
@ProcessAfter(CloudAutoConfiguration.class)
但是如何在Spring Boot
/ Spring Cloud
中实际执行此操作?
答案 0 :(得分:1)
在Spring启动时,您可以使用 @ConditionalOnBean Doc:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/condition/ConditionalOnBean.html
@ConditionalOnBean(CloudAutoConfiguration.class)
答案 1 :(得分:0)
在这种特殊情况下,没有任何东西可以帮助我,但“扭转了所有权”。
我在云服务扫描中更改了@Bean
的结果。现在它不会创建存储服务信息,而是使用这些属性创建存储库。
@ServiceScan
public class S3CloudCOnfig extends AbstractCloudConfig {
@Autowired
@Bean
public S3Repository s3Repository(final MyService service) {
// Cloud service configuration.
S3Properties properties = null;
try {
} catch (...) {
// No service is configured...
}
S3Repository result = null;
if (properties) {
result = new S3Repository(properties);
service.setObjectStorage(service);
}
return result;
}
}
由于service
100%仅通过正常配置(可选S3Repository
)配置而不是服务上的寄存器。这解决了S3存储库可选的问题。
并且service
逻辑只考虑了S3存储库可用的可选策略。所以没有任何@Autowired(required = false)
。