2009-08-25 105 views
2

我有一个web应用程序从属性文件中读取内容。这个属性文件什么时候会被加载到内存中。即。一旦我在prop文件中部署了一些内容的应用程序,并且在部署之后,我更改了prop文件的内容,这些更改是否会反映出来,还是必须重新部署?属性文件加载

编辑:访问类的静态块从属性文件中读取内容,属性文件是已部署的Web应用程序的一部分。现在部署后,我更改属性文件的内容。访问器类会读取更改还是会占用旧值?

EDIT2:类时重新加载,将它肯定接受新修改的文​​件或者更确切地说,在部署过程中占用的文件缓存(如果有的话是缓存)

+2

你能更具体吗? – 2009-08-25 14:32:55

+0

有没有框架(struts或其他)? – adatapost 2009-08-25 14:39:49

+0

我假设这是关于一些Web框架 - 不只是在一般的Web应用程序中使用属性文件。请编辑您的问题,以说明这是什么框架。 – Nate 2009-08-25 14:40:55

回答

2

假设属性文件由Properties类加载,那么当调用Properties#load()方法时,属性文件将被加载一次。它不会自动重新加载,除非您的应用程序明确支持重新加载,或者您的Web容器在热部署期间重新启动Web应用程序。

更新:由于属性文件是在静态初始化程序中加载的,因此当类重新加载时(例如,当Web应用程序热部署时),属性文件将被重新加载。如果你想调试这个,静态初始化器中的一个简单的println()会在这种情况发生时显示出来。

+0

雅,这就是正确的。但令人困惑的是,当类被重新加载时,它肯定会占用新的修改文件,或者在部署过程中占用缓存的文件(如果完全缓存) – Ajay 2009-08-26 03:59:52

+0

如果您持有对Properties对象的引用在类变量(静态)中,当类重新加载时,它将被垃圾回收。 – 2009-08-26 15:09:07

1

它取决于应用程序服务器 - 通常,您必须重新部署。但是,某些配置服务器在某些配置中可能会监视文件并在检测到文件更改时启动重新部署。 (例如 - 我相信Tomcat会在检测到爆炸部署中的文件更改时自动重新部署。)

0

如果此文件是由您的课程加载的,但我确信它不会通过它自行加载它。

如果我是你我会有一个单独的线程,在给定的时间间隔醒来,检查文件修改日期是否已经改变,如果它没有重新加载它。