Spring 3.1 中的默认配置文件



在我的应用程序中,我用@Profile("prod")@Profile("demo")注释了豆子。第一个,正如你可以猜到:),用于连接到生产数据库的 bean,第二个注释使用一些假数据库(HashMap或其他什么)的 bean——以使开发更快。

我想要的是默认配置文件("prod"),如果它没有被"其他东西"覆盖,它将始终使用。

完美的是在我的web.xml

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>prod</param-value>
</context-param>

然后用-Dspring.profiles.active="demo"覆盖它,以便我可以执行以下操作:

mvn jetty:run -Dspring.profiles.active="demo". 

但遗憾的是,这不起作用。知道我怎么能做到这一点吗?在我的所有环境中设置-Dspring.profiles.active="prod"不是一种选择。

将生产环境定义为 Web 中的默认配置文件.xml

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>prod</param-value>
</context-param>

如果要使用不同的配置文件,请将其作为系统属性传递

mvn -Dspring.profiles.active="demo" jetty:run

我的经验是使用

@Profile("default")

仅当未标识其他配置文件时,才会将 Bean 添加到上下文中。如果您传入不同的配置文件,例如 -Dspring.profiles.active="demo" ,则忽略此配置文件。

我有同样的问题,但我使用WebApplicationInitializer以编程方式配置ServletContext(Servlet 3.0+)。所以我做了以下几点:

public class WebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        // Create the 'root' Spring application context
        final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        // Default active profiles can be overridden by the environment variable 'SPRING_PROFILES_ACTIVE'
        rootContext.getEnvironment().setDefaultProfiles("prod");
        rootContext.register(AppConfig.class);
        // Manage the lifecycle of the root application context
        sc.addListener(new ContextLoaderListener(rootContext));
    }
}

您也可以考虑删除 PROD 配置文件,并使用 @Profile("!demo")

关于设置默认生产配置文件 已发布@andih

为 maven jetty 插件设置默认配置文件的最简单方法是在插件配置中包含以下元素:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <systemProperty>
                <name>spring.profiles.active</name>
                <value>demo</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

Spring 在确定哪些配置文件处于活动状态时提供了两个单独的属性:

  • spring.profiles.active

  • spring.profiles.default

如果设置了spring.profiles.active,则其值将确定哪些配置文件处于活动状态。但是,如果没有设置spring.profiles.active,那么春天看起来spring.profiles.default.

如果既未设置 spring.profiles.active 也未设置 spring.profiles.default,则没有活动的配置文件,并且仅创建那些未定义为在配置文件中的 bean。任何未指定配置文件的 Bean 都属于default配置文件。

您可以将

您的网络.xml设置为过滤资源,并由 maven 从 maven 配置文件设置中填充此值 - 这就是我们所做的。

在 POM 中过滤所有资源(如果您没有 ${} 标记,则可以这样做)

<webResources>
    <resource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
    </resource>
</webResources>

在 Web 中.xml将

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.prfile}</param-value>
</context-param>

在POM中创建Maven配置文件

<profiles>
    <profile>
        <id>DEFAULT</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>prod</spring.profile>
        </properties>
    <profile>
    <profile>
        <id>DEMO</id>
        <properties>
            <spring.profile>demo</spring.profile>
        </properties>
    <profile>
</profiles>

现在您可以使用

mvn jetty:run -P DEMO

或者只是使用任何 maven 命令-P DEMO

相关内容

  • 没有找到相关文章

最新更新