使用相对于配置文件的路径引用 Spring 属性文件

2022-09-04 19:27:57

我正在将属性从我的Spring配置文件内部移动到一个单独的属性文件。这包含在配置文件中,带有

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="file:properties/${CONFIG_MODE}/service.properties" />
</bean>

就目前而言,属性文件的位置相对于服务器进程的当前工作目录

这就要求必须从特定的工作目录启动进程,更糟糕的是,它允许(诚然是远程的)可能选取一个完全不同的属性文件 - 例如,如果它是在将工作目录设置为旧版本的服务的情况下启动的。

我想使用相对于包含配置文件的目录的路径来引用属性文件。

看看FileSystemResource,似乎createRelative可能是我需要的,但我不知道如何在配置文件中使用它。

谢谢

史蒂夫


答案 1

我不知道有没有办法做到这一点。

但是,您可以做的是从类路径加载属性文件:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="classpath:path/to/service.properties" />
</bean>

属性文件的类路径位置是一种更可预测的情况,只要类路径设置正确,它就可以正常工作。


答案 2

使用 3.1,如果需要,可以将文件保留在类路径之外。

有了下面的豆定义,

<bean class=
    "org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" 
    value="file:${props.path}/service.properties" />
</bean>

您可以使用 java 命令行设置属性

java ... -Dprops.path=path/to/where/it/is