簡體   English   中英

如何排除某些@Configuration並僅在Spring Boot中使用@Import導入它們

[英]How to exclude some @Configuration and only import them using @Import in Spring boot

我正在開發一個具有以下程序包結構的spring-boot webapp。

- com.myname.configs
    - CommonConfiguration.java  
    - DevConfiguration.java  
    - ProdConfiguration.java
    - SomeOtherConfiguration.java
- com.myname.profiles
    - DevProfile.java
    - ProdProfile.java

所有這些類都是@Configuration類,但是DevProfile.java和ProdProfile.java也具有@Profile和@Import批注。

CommonConfiguration ..

@Configuration  
public class CommonConfiguration {  
    //commmon configs / beans..  
}  

DevConfiguration ..

@Configuration
@Profile("dev")
public class DevConfiguration {

    @Bean
    //dev specific beans..
}

DevProfile ..

@Configuration  
@Import(value = {CommonConfiguration.class, DevConfiguration.class})  
@Profile("dev")  
public class DevProfile {}  

ProdProfile ..

@Configuration
@Import(value = {CommonConfiguration.class, ProdConfiguration.java})
@Profile("prod")
public class ProdProfile {}

由於某些原因,即使使用-Dspring.profile.active = prod,也會為DevConfiguration創建Bean。 唯一的解決方法是在DevConfiguration.java中添加@Profile(“ dev”)批注

有沒有一種方法只能為@Import批注中的類創建Bean? 在一個Profile類中管理導入似乎比將Profile添加到各種Configuration類中更合乎邏輯。

我正在尋找一種方法來執行@Aaron Digulla在此處#1中建議的操作如何在Spring中排除某些@Configuration文件?

如果僅通過導入配置文件類( DevProfile等)來使用配置類(CommonConfigurationDevConfiguration等),則可以從配置類中刪除@Configuration
在這種情況下,將僅通過活動概要文件類來創建來自配置類的Bean(現在,彈簧會掃描config類和概要文件類中的bean,但是@Profile("...")僅影響概要文件類) 。

實際上,發表評論后不久,我找到了答案。 這是Kirby的答案。 從Spring自動裝配中排除子包?

就我而言,我已經在@SpringBootApplication注釋之后添加了它。

@SpringBootApplication
@ComponentScan(basePackages = { "com.myname" },
              excludeFilters = @ComponentScan.Filter(type = FilterType.ASPECTJ, pattern = "com.myname.configs.*"))
public class DemoWebappApplication {...}  

這樣,概要文件類與它們中的@Imports一起被連接。

您是否在下面的鏈接(16.2節)中嘗試了@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})批注?

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM