78

我有两个 Spring 配置文件:devtest. 我想在服务器环境中设置活动配置文件,我不想在我的代码中设置它,以便无论我在哪里部署我的应用程序,配置文件都会根据服务器中的配置文件加载。我怎样才能做到这一点?

4

6 回答 6

145

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

-Dspring.profiles.active=test

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

编辑:要与Spring Boot一起使用,您还有一个额外的选择。如果在属性前面加上两个破折号,则可以将该属性作为程序参数传递。

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

系统属性

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

程序参数

[user@host ~]$ java -jar myproject.jar --spring.profiles.active=test
于 2013-04-04T14:47:23.970 回答
31

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

  1. 在 web.xml 中定义上下文参数——这打破了“一个包适用于所有环境”的声明。我不建议这样做

  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 时自动加载。

这是描述上述解决方案的博客。

于 2014-12-09T13:41:47.327 回答
8

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

右键单击项目 --> 运行方式 --> 运行配置 --> 参数

-Dspring.profiles.active=dev并在VM 参数中添加您的

于 2018-10-15T10:17:42.660 回答
4

作为系统环境变量:

Windows: 开始 -> 输入“envi”选择环境变量并添加一个新的:( Name: spring_profiles_active Value: dev或任何你的)

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

spring_profiles_active=prod(或任何个人资料)

那么export spring_profiles_active=prod你现在也可以在运行时使用它。

于 2017-08-16T19:01:27.150 回答
3

对于 Tomcat 8:

Linux:

创建 setenv.sh 并使用以下内容对其进行更新:

导出 SPRING_PROFILES_ACTIVE=dev

视窗:

创建 setenv.bat 并使用以下内容对其进行更新:

设置 SPRING_PROFILES_ACTIVE=dev

于 2018-06-25T18:11:27.040 回答
3

<tomcat-home>\conf\catalina.properties文件中,添加以下新行:

spring.profiles.active=dev
于 2020-08-18T15:39:32.020 回答