我有两个 Spring 配置文件:dev
和 test
。我想在服务器环境中设置活动配置文件,我不想在我的代码中设置它,以便无论我在哪里部署我的应用程序,配置文件都会根据服务器中的配置文件加载。我怎样才能做到这一点?
您可以简单地在服务器上设置系统属性,如下所示...
-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 文件的两个示例...
系统属性
[user@host ~]$ java -jar -Dspring.profiles.active=test myproject.jar
程序参数
[user@host ~]$ java -jar myproject.jar --spring.profiles.active=test
至少有两种方法可以做到这一点:
在 web.xml 中定义上下文参数——这打破了“一个包适用于所有环境”的声明。我不建议定义系统属性 -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 时自动加载。
Here is a blog 描述上述解决方案。
对于 Eclipse,在 VM 参数中设置 -Dspring.profiles.active
变量应该可以解决问题。
去
右键单击项目 --> 运行方式 --> 运行配置 --> 参数
并在 VM 参数 中添加您的 -Dspring.profiles.active=dev
作为系统环境变量:
Windows: 开始 ->输入“envi”选择环境变量并添加一个新的: Name: spring_profiles_active Value: dev
(或任何你的)
Linux:将以下行添加到 PATH 下的 /etc/environment:
spring_profiles_active=prod
(或任何个人资料)
然后还有 export spring_profiles_active=prod
,这样您现在就可以在运行时使用它了。
在 <tomcat-home>\conf\catalina.properties
文件中,添加以下新行:
spring.profiles.active=dev
对于 Tomcat 8:
Linux:
创建 setenv.sh 并使用以下内容对其进行更新:
导出 SPRING_PROFILES_ACTIVE=dev
视窗:
创建 setenv.bat 并使用以下内容对其进行更新:
设置 SPRING_PROFILES_ACTIVE=dev
--spring.profiles.active=test
是一个 Spring Boot 范例,当我写这个答案时,它在 2013 年还不存在。如果您选择使用它,它必须用作程序参数,位于类或 jar 名称之后。使用系统属性的-Dspring.profiles.active=test
方法仍然有效,但它必须位于类或 jar 名称之前。我将尝试更新此答案以更好地反映当前的春季方法。