2017-08-16 417 views
0

我們正在定義我們公司的微服務基礎架構。我們創建了我們自己的「父母」,它爲我們的服務定義了物料清單。此外,我們還有幾個可用於我們服務的「啓動器」項目和小型圖書館。 (例如,服務可以包含「starter-stream」以包含Kafka的依賴關係)。Spring Boot - 以編程方式禁用AutoConfiguration

流式應用程序庫爲Kafka設置提供了自己的自動配置,並要求禁用Kafka的默認AutoConfiguration。這很簡單,我們可以要求任何使用該庫的微服務添加「排除」。

我在尋找的是一種以編程方式執行此操作的方式,因此我們不必在每個Web服務中添加排除項。

我知道這可能是一種獨特的情況,我想這樣做的一種可能方式是將EnvironmentPostProcessor添加到我們的實用程序庫中,該實用程序庫將排除項添加到spring.autoconfigure.exclude。如果屬性已經存在,我們可以使其足夠聰明以連接排除。

有沒有一種更優雅的方式來做這種事情?

回答

1

我認爲你的建議可以通過EnvironmentPostProcessor來修改spring.auconfigure.exclude

另一種時髦的方式可能是將org.springframework.boot.autoconfigure.AutoConfigurationImportSelector繼承並覆蓋org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getExclusions,以便它將已配置的排除與已添加的排除組合在一起。

public class MyCustomSelector extends AutoConfigurationImportSelector { 
    @Override 
    protected Set<String> getExclusions(AnnotationMetadata metadata, AnnotationAttributes attributes) { 
    Set<String> exclusions = super.getExclusions(metadata, attributes); 
    exclusions.add("some.other.config.Configuration"); 
    return exclusions; 
    } 
} 

然後你就可以使用它與@Import(MyCustomSelector.class)

+0

要跟進這個問題,這是否意味着如果我想重寫默認選擇器,那我必須有@SpringBootApplication的自定義變體來導入我的選擇器而不是默認選擇器? – Tyler

相關問題