【问题标题】:Setting Spring Profile variable设置 Spring Profile 变量
【发布时间】:2013-03-26 17:19:03
【问题描述】:

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

【问题讨论】:

    标签: spring spring-boot spring-profiles


    【解决方案1】:

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

    -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
    

    【讨论】:

    • 我是 Spring 配置文件的新手。“在服务器上”。我需要在哪里以及如何设置它。
    • 还有一件事是,我是通过eclipse而不是命令行启动tomcat。
    • 您使用的是什么服务器?如果您使用的是 tomcat,则可以将其添加到 $CATALINA_HOME/conf/catalina.properties 但省略 -D 因此您只需添加 spring.profiles.active=test
    • --spring.profiles.active=test 是一个 Spring Boot 范式,当我写这个答案时,它在 2013 年还不存在。如果您选择使用它,它必须用作程序参数,位于类或 jar 名称之后。使用系统属性的 -Dspring.profiles.active=test 方法仍然有效,但它必须位于类或 jar 名称之前。我将尝试更新此答案以更好地反映当前的春季方法。
    • 有没有办法为每个 webapp/上下文设置不同的设置?如果我部署 Spring Boot app1 并希望它使用配置文件 x 和 Spring Boot app2 使用配置文件 y 运行,则设置环境变量或 JVM 系统属性将不起作用。有什么方法可以从上下文环境初始化配置文件?
    【解决方案2】:

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

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

    Here is a blog 描述了上述解决方案。

    【讨论】:

    【解决方案3】:

    作为系统环境变量:

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

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

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

    然后还有export spring_profiles_active=prod,这样你现在就可以在运行时使用它了。

    【讨论】:

    • 这很好用(在 Windows 中测试),在 OSGI 容器中运行应用程序时也是如此。只需记住在设置后重新启动 JVA 实例,并确保未设置名为“spring.profiles.active”的系统属性。仅供参考,这实际上并没有设置系统属性,而是设置了 Spring Environment 实例配置文件。谢谢!
    【解决方案4】:

    对于 Tomcat 8:

    Linux:

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

    导出 SPRING_PROFILES_ACTIVE=dev

    窗户:

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

    设置 SPRING_PROFILES_ACTIVE=dev

    【讨论】:

      【解决方案5】:

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

      前往

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

      并在 VM 参数

      中添加您的 -Dspring.profiles.active=dev

      【讨论】:

      • @syed 我很高兴它有帮助。
      【解决方案6】:

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

      spring.profiles.active=dev
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2021-09-10
        • 2018-07-15
        • 2016-11-15
        相关资源
        最近更新 更多