尝试从 Spring 中的 WEB-INF 目录读取属性文件时出错

Error trying to read properties file from WEB-INF directory in Spring

在我的 Java 服务中,我正在尝试读取如下属性文件

@Configuration
@ComponentScan(basePackages = { "com.site.xxx.*" })
@PropertySource("classpath:application.properties")
@Service("someService")
public class SomeService {
    @Autowired
    private Environment env;
    ...
}

然后在我的一种方法中,我

String closeDate = env.getProperty("close.date");

这里有 2 个问题,我可以解决其中一个问题。

1> 如果我的 application.properties 文件在类路径中,它会以读取文件的方式工作。我把它放在 src/main/resources 下,它会在我部署更改后读取文件,但如果我更改此 属性 文件中的日期,它仍然会显示编译代码时输入的第一个日期.所以阅读部分有效,但当我更改文件内容时它不会改变。

2> 如果我更改下一行的内容

@PropertySource("classpath:WEB-INF/application.properties")

如果我将文件放在我的 WEB-INF 目录下,即使文件存在,它也会显示找不到文件。

我非常希望 #2 可以工作,但如果它无法工作(我不认为是这样),我可以使用 #1,只要它表现得像 属性 文件。

Spring 在容器启动期间加载 属性 文件 ,因此无论何时更改 application.properties 中的 属性,您需要重新启动服务器。因此,这可能是您的选项 (1) 不起作用的原因。

如果您想使用选项 (2),您可以将 PropertySource 配置为 file:(而不是 classpath:),如下所示,您需要设置 myproject.home(或您选择的任何其他名称)作为环境(OS)或系统变量。

@PropertySource("file:${myproject.home}/WEB-INF/application.properties")

Do property file changes usually warrant a server restart?

是的,他们需要重新启动容器。