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

标签 java 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");

这里有两个问题,我可以将其中一个作为解决方案。

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/

相关文章:

java - 如何在不实际构建东西的情况下制作 gradle 下载依赖项

java - 无法检索预绑定(bind)的 Hibernate session - 无法获取当前线程的事务同步 session

java - 如何使用 Java Spring 配置运行独立的 Hibernate 4 SchemaExport

java - 传递给 Android 模拟器的自定义参数/变量

java - Spring请求验证不起作用

java - 将 DAO 注入(inject)构造函数是否被认为是不好的做法?如果是这样,为什么?

java - Spring 中未找到默认构造函数

java - Spring 3.0 将文件作为资源注入(inject)

java - 我的 Spring Boot 应用程序加载后立即退出,不会出现错误

spring - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'jedisClientPool' defined in class path resource