尝试从Spring

时间:2017-03-31 21:06:37

标签: 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下,它在我部署更改后读取文件BUT,如果我更改了这个属性文件中的日期,它仍然显示编译代码时输入的第一个日期。因此,阅读部分可以工作,但是当我更改文件内容时它不会改变。

2 - ;如果我更改以下行的内容

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

如果我将文件放在我的WEB-INF目录下,即使该文件存在,也会显示File Not Found。

我非常希望#2能够工作,但如果它无法工作(我不认为),只要它的行为类似于属性文件,我就可以使用#1。

1 个答案:

答案 0 :(得分:1)

Spring在容器启动期间加载属性文件,因此每当您更改application.properties内的属性时,都需要重新启动服务器。因此,这可能是您的选项(1)无效的原因。

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

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

属性文件更改通常是否需要重启服务器?

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