在我的应用程序中,我用@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