在我的 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");
这里有两个问题,我可以将其中一个作为解决方案。
1> 如果我的 application.properties 文件位于类路径中,它会读取该文件。我将其放在 src/main/resources 下,它会读取该文件,但是在部署更改后,如果我更改此属性文件中的日期,它仍然会显示编译代码时输入的第一个日期。所以读取部分可以工作,但当我更改文件内容时它不会改变。
2> 如果我更改以下行的内容
@PropertySource("classpath:WEB-INF/application.properties")
如果我将该文件放在 WEB-INF 目录下,即使该文件存在,它也会显示“找不到文件”。
我非常希望#2能够工作,但如果它无法工作(我不认为),我可以使用#1,只要它的行为类似于属性文件。
最佳答案
Spring 在容器启动期间加载属性文件,因此每当您更改 application.properties
中的属性时,都需要重新启动服务器。因此,这可能是您的选项(1)不起作用的原因。
如果您想使用选项(2),您可以使用 file:
(而不是 classpath:
)配置 PropertySource
,如图所示下面,您需要将 myproject.home
(或您选择的任何其他名称)设置为环境 (OS) 或系统变量。
@PropertySource("file:${myproject.home}/WEB-INF/application.properties")
Do property file changes usually warrant a server restart?
是的,他们需要重新启动容器。
关于java - 尝试从 Spring 中的 WEB-INF 目录读取属性文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43149668/