【发布时间】:2017-06-30 13:00:50
【问题描述】:
在所有 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 仍然为空?
- 我无法要求 s3。它并不总是配置。
- 我不能使用@Lazy。来自其他服务的引用...至少会很混乱(如果可能的话)。
我需要类似...
@ProcessAfter(CloudAutoConfiguration.class)
但是在Spring Boot / Spring Cloud 中实际上如何做到这一点?
【问题讨论】:
-
那么,你不能用
@DependsOn("beanB")注解做到这一点,对吧? -
是的,@DependsOn 存在 S3 是可选的问题。正如我所看到的,无论如何都过早地检查它(云还不支持属性)..
-
MyService myservice(S3Storage s3) { ... }不适合你吗? -
不,在这种情况下@Autowire 甚至不考虑 'required' = false。
-
在春季启动的情况下,您可以使用@ConditionalOnBean
标签: java spring spring-boot spring-cloud