从外部Tomcat目录中读取可重载的xml文件

先决条件

  • Apache Tomcat 7
  • spring3.2.11.RELEASE
  • Apache Camel 2.14.1
  • 我的Web应用程序像往常一样部署在$ {catalina.home} / webapps /中

要求

  • 读取放在war-Archive之外的 xml文件(例如来自$ {catalina.home} / myfolder /)
  • xml文件应该是可重新加载的 。 因此,如果xml更改,我的Web应用程序中应该可以使用新的xml文件
  • 应将xml文件映射到Java-Objects

第一次尝试

我已经通过tomcat在catalina.home /conf/catalina.properties中将文件添加到classpath:

 common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/myfolder/ 

该文件放在这里:$ {catalina.home} /myfolder/myFile.xml

读取和映射文件到Java-Objects通过apache camel中的计时器工作。

 from("timer://myTimer?fixedRate=true&period=20000") .setBody(simple("resource:classpath:myFile.xml")) .unmarshal(myFileJaxbDataFormat) .process(myFileTimerProcessor); 

myFileTimerProcessor获取映射的对象并将其存储到Spring-Bean。 其他Camel-Routes使用此Bean来访问xml文件中包含的Data。

问题

正如Claus Ibsen在下面提到的,问题是ClassLoader缓存了文件。 因此,如果文件中的数据已更改,则不会再次读取该文件。 如果文件$ {catalina.home} /myfolder/myFile.xml发生更改,则应再次读取该文件,并且新值应该可供计时器使用,以便它可以读取应用程序的新值。

是否有可能在war-Archive之外读取xml文件并在内容发生变化时重新加载?

是否有更常见的警惕?

提前致谢。

问候,

马克斯

编辑1:我重新调整了问题,不仅要问具体细节。

该文件由Java类加载器缓存,而不是Camel可以做任何事情。 您可能需要使用文件资源而不是classpath加载文件。