在完成Spring云自动配置之后,我需要延迟我的应用程序“服务”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,但它是空的?
我需要像..。
@ProcessAfter(CloudAutoConfiguration.class)但是如何在Spring Boot / Spring Cloud中真正做到这一点呢?
发布于 2017-02-17 18:51:25
在这种特殊情况下,除了“所有权的逆转”,没有什么能帮助我。
我已经更改了云服务扫描上的@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)。
发布于 2017-02-12 18:08:40
在Spring中,您可以使用@ConditionalOnBean Doc:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/condition/ConditionalOnBean.html
@ConditionalOnBean(CloudAutoConfiguration.class)https://stackoverflow.com/questions/42188871
复制相似问题