Java 如何延迟bean直到所有SpringCloudConnectors扫描完成?
在所有Spring Boot云自动配置完成后,我需要延迟我的应用程序“服务”bean处理 “服务”bean既依赖于SQLJava 如何延迟bean直到所有SpringCloudConnectors扫描完成?,java,spring,spring-boot,spring-cloud,Java,Spring,Spring Boot,Spring Cloud,在所有Spring Boot云自动配置完成后,我需要延迟我的应用程序“服务”bean处理 “服务”bean既依赖于SQLDataSource,也依赖于其他bean(S3存储库),这是可选的,可以基于云服务配置或直接配置的属性创建(甚至根本不创建)。底层S3和SQL服务都是根据各种外部条件完美配置的。它们在直接、间接属性、云等方面表现良好 所以现在我有点像 @Autowired(required=false) S3Storage s3; @Autowired SQLDatabase db; @
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);
}
}
@ProcessAfter(CloudAutoConfiguration.class)
我对这个Bean
做了什么,所以在使用s3的cloud
服务(spring cloud connectors
使用)之前它不会被处理
- 我不能要求s3。它并不总是配置的
- 我不能用@Lazy。来自其他服务的引用。。。至少会很混乱(如果可能的话)
@Autowired(required=false)
S3Storage s3;
@Autowired
SQLDatabase db;
@Bean
MyService myservice() {
if (s3 != null) {
return new SQLWithS3Implementation(db, s3);
} else {
return new SQLImplementation(db);
}
}
@ProcessAfter(CloudAutoConfiguration.class)
但是在Spring Boot中如何真正做到这一点呢?在Spring Boot中,您可以使用@ConditionalOnBean 文件:
在这种特殊情况下,除了“所有权的倒转”,什么也帮不了我 我已经更改了云服务扫描的
@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;
}
}
As服务
仅通过正常配置进行100%配置可选S3Repository
而不是在服务上注册。这解决了S3存储库是可选的问题
而
service
logics只是说明了S3存储库上的可选策略是可用的。所以没有任何@Autowired(required=false)
所以,你不能用@DependsOn(“beanB”)
注释来做这件事,对吧?是的,@DependsOn有问题,S3是可选的。正如我所看到的,在任何情况下检查都太早了(云还不支持属性)…MyService MyService(S3Storage s3){…}对您不起作用吗?不,在这种情况下@Autowire甚至没有考虑“required”=false。在spring引导的情况下,您可以使用@ConditionalOnBeanNo,这对顺序没有影响。只是“如果”的条件,这是没有帮助的。你能为订单做DependsOn吗?