在我的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下,它在我部署更改后读取文件BUT,如果我更改了这个属性文件中的日期,它仍然显示编译代码时输入的第一个日期。因此,阅读部分可以工作,但是当我更改文件内容时它不会改变。
2 - ;如果我更改以下行的内容
@PropertySource("classpath:WEB-INF/application.properties")
如果我将文件放在我的WEB-INF目录下,即使该文件存在,也会显示File Not Found。
我非常希望#2能够工作,但如果它无法工作(我不认为),只要它的行为类似于属性文件,我就可以使用#1。
答案 0 :(得分:1)
Spring在容器启动期间加载属性文件,因此每当您更改application.properties
内的属性时,都需要重新启动服务器。因此,这可能是您的选项(1)无效的原因。
如果您想使用选项(2),可以使用PropertySource
(而不是file:
)配置classpath:
,如下所示,您需要设置myproject.home
(或您选择的任何其他名称)作为环境(OS)或系统变量。
@PropertySource("file:${myproject.home}/WEB-INF/application.properties")
属性文件更改通常是否需要重启服务器?
是的,他们需要重启容器。