2013-02-06 236 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用途,如果你需要快速了解或改变都被拉到什么豆英寸