Spring 3.1中的默认configuration文件
在我的应用程序中,我用@Profile("prod")
和@Profile("demo")
注释了bean。 第一个,你可以猜到:)用于连接到生产数据库的bean,第二个注释使用一些假DB( HashMap
或其他)的bean,以加快开发速度。
我想要的是默认configuration文件( "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"
不是一个选项。
我的经验是使用
@Profile("default")
如果没有其他configuration文件被标识,这个bean只会被添加到上下文中。 如果您传入其他configuration文件,例如-Dspring.profiles.active="demo"
,则此configuration文件将被忽略。
将您的生产环境定义为web.xml中的默认configuration文件
<context-param> <param-name>spring.profiles.default</param-name> <param-value>prod</param-value> </context-param>
如果你想使用不同的configuration文件传递它作为系统属性
mvn -Dspring.profiles.active="demo" jetty:run
您也可以考虑删除PRODconfiguration文件,并使用@Profile(“!demo”)
我有同样的问题,但我使用WebApplicationInitializer以编程方式configurationServletContext(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)); } }
关于设置默认生产configuration文件已发布@andih
为maven jetty插件设置默认configuration文件最简单的方法是在您的插件configuration中包含以下元素:
<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在确定哪些configuration文件处于活动状态时提供了两个独立的属性: 1)spring.profiles.active和2)spring.profiles.default。 如果设置了spring.profiles.active,则其值将确定哪些configuration文件处于活动状态。 但是如果没有设置spring .profiles.active,那么Spring将会看到spring.profiles.default。 如果既没有设置spring.profiles.active也没有设置spring.profiles.default,那么就没有活动的configuration文件,只有那些没有定义在configuration文件中的bean才被创build。没有指定configuration文件的bean属于“默认”configuration文件。
您可以将您的web.xml设置为过滤资源,并通过Mavenconfiguration文件设置中的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创buildmavenconfiguration文件
<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
- configurationconfiguration文件的命令行更新
- 用户的Subversionconfiguration文件在主要操作系统上存储在哪里?
- 我的postgres * .conf文件在哪里?
- 从.war文件中外部化Tomcat webappconfiguration
- 查询参数(postgresql.conf设置),如“max_connections”
- 无法使用GetManifestResourceStream()加载清单资源
- 如何增加IntelliJ中打开的编辑器的最大数量?
- SpringMVC可以configuration为处理所有请求,但排除静态内容目录吗?
- 如何在Symfony2 Twig模板中获取configuration参数