设置Spring Profilevariables

我有两个Springconfiguration文件:“dev”和“test”。 我想在服务器环境中设置活动configuration文件,我不想将其设置在我的代码中,以便在我部署应用程序的任何地方,configuration文件都将根据服务器中的configuration文件加载。 我怎样才能做到这一点?

您可以简单地在服务器上设置系统属性,如下所示…

-Dspring.profiles.active=test 

编辑:要添加到Eclipse中的tomcat,selectRun -> Run Configurations并select您的Tomcat运行configuration。 单击“ Arguments选项卡,并在VM arguments的末尾添加-Dspring.profiles.active = test。 另一种方法是将属性添加到您的Servers项目中的catalina.properties,但是如果添加它,那么省略-D

编辑:用于Spring Boot ,你有一个额外的select。 如果用两个破折号前置该属性,则可以将该属性作为程序parameter passing。

这里有两个使用Spring Boot可执行jar文件的例子

系统属性

 [user@host ~]$ java -jar -Dspring.profiles.active=test myproject.jar 

程序参数

 [user@host ~]$ java -jar myproject.jar --spring.profiles.active=test 

至less有两种方法可以做到这一点:

  1. 在web.xml中定义上下文参数 – 打破“所有环境的一个包”语句。 我不build议这样做

  2. 定义系统属性-Dspring.profiles.active=your-active-profile

我相信定义系统属性是一个更好的方法。 那么如何定义Tomcat的系统属性呢? 在互联网上,我可以find很多的build议,如“修改catalina.sh”,因为你不会find任何configuration文件做这样的东西。 修改catalina.sh是一个肮脏的不可维护的解决scheme。 有一个更好的方法来做到这一点。

只需在Tomcat的bin目录下创build文件setenv.sh,内容如下:

 JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev" 

并在运行catalina.sh启动或运行时自动加载。

这是一个描述上述解决scheme的博客 。 评论部分是有趣的,因为它谈到更多的细节。

作为系统环境variables:

Windows:开始 – >input“envi”select环境variables,并添加一个新的: Name: spring_profiles_active Value: dev (或任何你的是)

Linux:在PATH下添加以下行到/ etc / environment:

spring_profiles_active=prod (或任何configuration文件是)

那么也可以export spring_profiles_active=prod这样你就可以在运行环境中使用了。