2013-02-06 296 views
1

我有一個應用程序,爲此我可以指定要運行它的配置文件。 但我也希望將這些配置文件分組到credentails,應用程序性能,內存打印,應用程序行爲等內容。我可以運行下面的曲線彈簧配置文件組

-Dspring.profiles.active=production,cached-local,db-connection-pooled... 

但我寧願初始化它作爲

-Dspring.profiles.active=production,super-fast 
#the above activates method level caches, db connection pooling etc 
#super-fast triggered activation of cached-local, db-connection-pooled profiles 

-Dspring.profiles.active=dev,low-footprint 
#the above dosent enable caching, or db connection pooling 

可以這樣無需編寫像 How to set active spring 3.1 environment profile via a properites file and not via an env variable or system property任何自定義代碼來實現的。 我很好,即使我可以從屬性文件或spring-xml配置中加載這些文件。 我在Spring 3.1上只使用xml配置。

+0

你有沒有得到這個地方?我試圖想出一個解決方案來做類似的事情。 –

+0

抱歉延誤。不,我沒有找到解決方案。讓我知道你是否做過。 – user918953

回答

0

我不知道有什麼方法可以實現這一點,而無需自定義代碼來操作ConfigurableEnvironment中的活動配置文件。

我們試圖在安全框架中實現與權利與角色(權利組)相同的間接模式,但是由於這不是開箱即用的,我最終不得不解決它。

我保留了我的個人資料,例如生產和超快速,而且對於那些對這些配置文件很敏感的bean,我設置了正確的@Profile。爲了使重構更容易,我使用了兩種技術。

  1. 爲每個配置文件創建一個元註釋,例如, @Production,@SuperFast並且使配置文件名稱成爲公共常數,例如, Production.PROFILE_NAME = "production"
  2. 標記任何bean的配置文件時,如果它僅適用於一個配置文件,則使用新的元註釋;如果它適用於多個配置文件,則使用@Profile({Production.PROFILE_NAME, ...})。您必須這樣做,因爲您無法將兩個配置文件元註釋應用於同一個bean,at least not until 4.0

例如,

@Profile(Production.PROFILE_NAME) 
public @interface Production { 

    public static String PROFILE_NAME = "production"; 
} 

所有這一切的一點是,你現在可以使用你的IDE來尋找的@ProductionProduction.PROFILE_NAME用途,如果你需要快速瞭解或改變都被拉到什麼豆英寸