设置Spring Profile变量

91

我有两个Spring配置文件: devtest。我想在服务器环境中设置活动配置文件,而不是在我的代码中设置它,以便无论我在哪里部署应用程序,都可以根据服务器上的配置文件加载配置文件。该怎么做?

6个回答

167
你可以在服务器上简单地设置一个系统属性,如下所示...
-Dspring.profiles.active=test

编辑: 要将此添加到Eclipse中的Tomcat,请选择Run -> Run Configurations并选择您的Tomcat运行配置。 点击Arguments选项卡,在VM arguments的末尾添加-Dspring.profiles.active=test。 另一种方法是将属性添加到Servers项目中的catalina.properties中,但如果在那里添加它,则省略-D

编辑: 对于Spring Boot,您有另一个选择。 如果您在属性前面加上两个破折号,可以将属性作为程序参数传递。

以下是使用Spring Boot可执行jar文件的两个示例...

系统属性

$ java -jar -Dspring.profiles.active=test myproject.jar

程序参数

$ java -jar myproject.jar --spring.profiles.active=test

2
我对Spring profiles的“ON THE SERVER”很陌生。我需要在哪里以及如何设置它? - Maheshwaran K
8
你在使用什么服务器?如果你在使用Tomcat,可以将以下内容添加到$CATALINA_HOME/conf/catalina.properties文件中,但不要包含-D,只需添加spring.profiles.active=test即可。 - hyness
1
“--spring.profiles.active=test”是Spring Boot的一种范例,而在2013年我写这篇答案时它并不存在。如果您选择使用它,它必须作为程序参数使用,并且必须放在类或jar名称之后。使用系统属性的“-Dspring.profiles.active=test”方法仍然有效,但它必须放在类或jar名称之前。我会尝试更新这个答案以更好地反映当前的Spring方法。 - hyness
如果您正在使用Spring Boot,那么您应该使用嵌入式Tomcat,这样您就可以自由地使用不同的程序参数、系统属性甚至环境变量,因为每个应用程序都将在单独的JVM中运行。 - hyness
但是,当您在服务器上运行此代码时,您必须使用nohup命令,对吗?或者当将可执行的jar文件作为服务运行时,这也适用吗? - Gabriel
显示剩余4条评论

33

至少有两种方法可以实现:

  1. 在web.xml中定义context参数——这会破坏“一个包适用于所有环境”的说法。我不推荐这样做。

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

我认为定义系统属性是更好的方法。那么如何为Tomcat定义系统属性呢?在互联网上,我可以找到很多建议,比如“修改catalina.sh”,因为你找不到任何配置文件来完成这样的事情。修改catalina.sh是一种肮脏且不可维护的解决方案。有一种更好的方法。

只需要在Tomcat的bin目录下创建setenv.sh文件,并添加以下内容:

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

而且它将在运行catalina.sh start或run期间自动加载。

这里有一篇博客描述了上述解决方案。


9
对于Windows使用,设置JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active=dev(不带引号) - ThomasRS
3
我认为最好使用CATALINA_OPTS,参见:https://dev59.com/qWsz5IYBdhLWcg3wrJwx - Ortomala Lokni
2
以上链接已经失效。 - pramodc84

11

对于Eclipse,设置-Dspring.profiles.active变量在VM arguments中应该就可以解决问题了。

前往

右键点击项目-->运行为-->运行配置-->参数

并将-Dspring.profiles.active=dev添加到VM arguments中。


5
<tomcat-home>\conf\catalina.properties文件中添加以下新行:
spring.profiles.active=dev

4
作为系统环境变量: Windows: 开始菜单 -> 输入“envi”选择环境变量并添加一个新的: 名称:spring_profiles_active 值:dev(或者您的任何值) Linux: 在PATH下添加以下行到/etc/environment中: spring_profiles_active=prod(或者其他配置文件)
然后还要 export spring_profiles_active=prod,这样你就可以在运行时使用它了。

这个非常好用(在Windows上测试过),在OSGI容器中运行应用程序时也很好用。只需记得在设置后重新启动JVA实例,并确保未设置名为“spring.profiles.active”的系统属性。顺便说一下,这实际上并没有设置系统属性,而是Spring Environment实例配置文件。谢谢! - Tormod Haugene

3

对于Tomcat 8:

Linux :

创建setenv.sh文件,并更新以下内容:

export SPRING_PROFILES_ACTIVE=dev

Windows:

创建setenv.bat文件,并更新以下内容:

set SPRING_PROFILES_ACTIVE=dev


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接