在我的应用程序中,我使用@Profile("prod")
和@Profile("demo")
注释了bean。
第一个,正如你可以猜到:),用于连接到生产数据库的bean,第二个用于注释使用一些假数据库(HashMap
或其他)的bean - 以加快开发速度。
我想要的是默认配置文件("prod"
),如果它未被“ something-else ”覆盖,它将永远使用。
完美将是我的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"
都不是一种选择。
答案 0 :(得分:110)
将您的生产环境定义为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
答案 1 :(得分:65)
我的经验是使用
@Profile("default")
如果没有识别出其他配置文件,则只会将bean添加到上下文中。如果您传入不同的个人资料,例如-Dspring.profiles.active="demo"
,此个人资料将被忽略。
答案 2 :(得分:5)
您也可以考虑删除PROD配置文件,并使用@Profile(&#34;!demo&#34;)
答案 3 :(得分:5)
我有同样的问题,但我使用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));
}
}
答案 4 :(得分:3)
关于设置已发布的默认生产资料@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>
答案 5 :(得分:2)
Spring在确定哪些配置文件处于活动状态时提供两个单独的属性:
spring.profiles.active
和
spring.profiles.default
如果设置了spring.profiles.active
,则其值确定哪些配置文件处于活动状态。但如果spring.profiles.active
未设置,则Spring会查看spring.profiles.default.
如果既没有设置spring.profiles.active
也没有设置spring.profiles.default
,那么就没有活动的配置文件,只创建那些未被定义为在配置文件中的bean。任何没有的bean指定个人资料属于default
个人资料。
答案 6 :(得分:-1)
您可以将web.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
或只是-P DEMO
使用任何maven命令