【问题标题】:Spring to read environment based propertiesSpring 读取基于环境的属性
【发布时间】:2018-08-08 09:28:24
【问题描述】:

我有一个 spring 项目(不是 spring boot),其中有 3 个基于环境的属性文件和 1 个主属性文件。 每次启动时都会读取 application.properties,但我希望在使用 -Denv=dev 运行应用程序时读取 application-dev.properties。

我使用 gradle tomcatRunWar 运行应用程序,配置如下: run configurations

我的 commonContext.xml 是这样设置的:

  <bean id="configProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer ">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
  <list>
    <value>classpath:conf/application.properties</value>
    <value>classpath:conf/application-#{systemProperties['env']}.properties</value>
  </list>
</property>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="searchSystemEnvironment" value="true"/>

但在日志中它只是说“conf/application-.properties 无法打开,因为它不存在”,因此它不会读取我使用 -Denv=dev 设置的值。

我已经阅读了一些其他主题,但没有看到这样的问题。 设置环境变量有效,但这不是一个可以使用的选项。

【问题讨论】:

    标签: java spring properties configuration


    【解决方案1】:

    这会起作用

    <value>classpath:conf/application-${env}.properties</value>
    

    任何系统参数都会自动添加到环境中。

    【讨论】:

    • 感谢回复,但这甚至没有尝试读取任何内容。无法从类路径资源 [conf/application-${env}.properties] 加载属性:类路径资源 [conf/application-${env}.properties] 无法打开,因为它不存在
    • @TaaviKivimaa 那么你没有正确设置环境变量,上面的语法是正确的见here
    【解决方案2】:

    感谢您的帮助,我发现问题在于使用 IntelliJ 时,运行配置中设置的属性无法在代码中访问,但使用 gradle 运行时,它是可以访问的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2017-02-12
      • 2021-03-12
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多