[英]How to delay beans until all spring cloud connectors scan is finished?
所有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
做了什么,所以在使用s3但是為null的cloud
服務(使用spring-cloud-connectors
)之前沒有處理它?
我需要像......
@ProcessAfter(CloudAutoConfiguration.class)
但是在Spring Boot
/ Spring Cloud
實際上是如何實現的呢?
在Spring啟動中,您可以使用@ConditionalOnBean Doc: http : //docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/condition/ConditionalOnBean.html
@ConditionalOnBean(CloudAutoConfiguration.class)
在這種特殊情況下,沒有什么能夠幫助我,但“逆轉所有權”。
我在雲服務掃描中更改了@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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.