簡體   English   中英

Java Spring ApplicationContext配置

[英]Java Spring ApplicationContext Configuration

我正在將所有Spring配置遷移到Java代碼。 我遇到了一個問題,現在我想根據命令行開關或Maven配置文件等來設置要使用的配置文件...我也想避免在每個測試中都放置所有相同的批注類。 這不是Web應用程序,而是功能測試套件。

這是我的嘗試:

public class CompanyApplicationContextInitializer 
  implements ApplicationContextInitializer<ConfigurableApplicationContext> {

  @Override
  public void initialize(final ConfigurableApplicationContext applicationContext) {
    final AnnotationConfigApplicationContext rootContext = new AnnotationConfigApplicationContext();
    rootContext.getEnvironment().setActiveProfiles(System.getProperty("spring.profile.active", "local"));
    rootContext.register(LocalConfiguration.class, SauceLabsConfiguration.class);
  }
}

然后,我的測試將帶有以下注釋:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CompanyApplicationContextInitializer.class)

但是,當我嘗試運行測試時,找不到自動接線的零件。 我完全走對了嗎? 如何連接此類以編程方式設置ApplicationContext?

上面的示例的問題在於,您正在傳遞ApplicationContextInitializer類@ ContextConfiguration#classes。 #classes屬性旨在接受標有Spring的@Configuration批注的類。

ApplicationContextInitializer主要用於Web應用程序,因為在Web應用程序中很難以編程方式訪問WebApplicationContext。 可以將“ contextInitializerClasses” init參數傳遞給Spring DispatcherServlet,Spring會在正確的時間調用您的ACI實現,從而允許您在#refresh()之前操作應用程序上下文。

就您而言,您似乎只關心激活集成測試的概要文件。 因此,您的ACI是不必要的。 使用Spring的@ActiveProfiles批注標記集成測試,以指示哪些配置文件處於活動狀態。

請注意,如果將spring.profiles.active設置為JVM系統屬性或環境變量,則將自動激活指定的配置文件。 即,無需像在ACI實現中那樣調用System#getProperty。 但是要注意的一件事是,基於ACI實現中的邏輯,如果spring.profiles.active作為系統屬性或環境變量提供,則您似乎希望退回到名為“ local”的配置文件。 您可能想知道有一個名為“默認”的“保留的默認配置文件”。 這可能與您在“本地”配置文件中查找的語義相同。 考慮將您的“本地”個人資料重命名為“默認”。

最后,請注意,確實存在一個開放的改進請求,用於在@ContextConfiguration類中提供ApplicationContextInitializer支持: https ://jira.springsource.org/browse/SPR-9011。 您可能想在上面放一塊手表。 例如,如果沒有其他配置文件處於活動狀態,它將為您提供一個簡單的選項,以編程方式激活“本地”。

嘗試將應用上下文XML的位置添加到第二個注釋中:

@ContextConfiguration(locations = {
    "classpath:applicationContext.xml"
})

暫無
暫無

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

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