【问题标题】:Setting environment for property location物业定位设置环境
【发布时间】:2017-08-29 09:00:24
【问题描述】:

我正在使用属性文件配置我的 spring 应用程序。但是我必须在开发和生产属性文件之间进行切换。目前我有这个代码sn-p

@Configuration
@PropertySource(value = "classpath:config/simulator.properties", ignoreResourceNotFound = false)
public class AppConfiguration

但我想要一些 value = "classpath:${env:local}/simulator.properties"

这意味着如果我没有设置环境变量 env,它必须指向 local/simulator.properties,否则如果环境 env 变量指向生产,则位置必须是 production/simulator.properties。

所以,本地是后备环境。

有什么办法可以做到这一点。我不想使用配置文件,它必须由环境变量控制

我不想为配置文件设置 -D 选项

谢谢

约翰

【问题讨论】:

  • 你真的试过了吗?

标签: java spring


【解决方案1】:

您可以使用多个@PropertySource 注解,如果找到第一个文件和第二个文件,并且两个文件中的键匹配,则将采用后一个文件。请看here

@PropertySource(value="classpath:local/simulator.properties",ignoreResourceNotFound=true)
@PropertySource(value="classpath:${env.production}/simulator.properties",ignoreResourceNotFound=true)

【讨论】:

    【解决方案2】:

    如果我们有windows,Spring会自动从系统根路径查看,那么c:/会被spring自动理解,如果我们有Linux机器,那么/将是根目录。 所以这里我们不需要设置classpath或者-D标签。

    【讨论】:

      【解决方案3】:

      实际上在我的测试(单元测试 4)中我使用了注释:

      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration(locations = {"classpath:com/myTest/MyTestApplicationContext.xml"})
      

      这允许您为每个测试拥有一个单独的应用程序上下文,并为开发环境拥有一个单独的应用程序上下文。然后,当然在每个应用程序上下文中,您都可以配置要从不同位置读取的属性。很适合我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        • 2017-12-08
        • 1970-01-01
        相关资源
        最近更新 更多