2

我有一个应用程序,我可以为其指定要运行它的配置文件。但我也想将这些配置文件分组为凭据、应用程序性能、内存打印、应用程序行为等。例如。我可以运行以下配置文件

-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

这是否可以在不编写任何自定义代码的情况下实现,例如 如何通过属性文件而不是通过环境变量或系统属性设置活动的 spring 3.1 环境配置文件。即使我可以从属性文件或 spring-xml 配置中加载这些,我也很好。我在 spring 3.1 上仅使用 xml 配置。

4

1 回答 1

0

如果没有自定义代码来操作ConfigurableEnvironment.

我们试图在安全框架中实现与权限与角色(权限组)相同的间接模式,但由于这不是开箱即用的,我最终不得不解决它。

我保持我的配置文件通用,例如在您的情况下生产和超快速,并且对于对这些配置文件敏感的每个 bean,我设置了正确的@Profile。为了使重构更容易,我使用了两种技术。

  1. 为每个配置文件创建一个元注释,例如@Production@SuperFast并使配置文件名称成为公共常量,例如Production.PROFILE_NAME = "production"
  2. 在标记任何 bean 的配置文件时,如果它仅适用于一个配置文件,则使用新的元注释,或者@Profile({Production.PROFILE_NAME, ...})如果它适用于多个配置文件,则使用。您必须这样做,因为您不能将两个配置文件元注释应用于同一个 bean,至少在 4.0 之前不能

例如,

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

    public static String PROFILE_NAME = "production";
}

所有这一切的重点是,您现在可以使用您的 IDE 来查找@ProductionProduction.PROFILE_NAME是否需要快速了解或更改正在拉入的 bean。

于 2013-10-27T10:32:51.500 回答