从外部Tomcat目录

时间:2015-04-23 16:41:04

标签: java xml tomcat apache-camel

先决条件

  • Apache Tomcat 7
  • Spring 3.2.11.RELEASE
  • Apache Camel 2.14.1
  • 我的Web应用程序部署在$ {catalina.home} / webapps /中[正常]

要求

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

首先尝试

我已经通过catalina.home / conf / catalina.properties中的tomcat将文件添加到了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

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

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

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

问题

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

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

有更常见的警惕吗?

提前致谢。

此致

最高

编辑1: 我重新组织了这个问题,不仅要问具体细节。

1 个答案:

答案 0 :(得分:1)

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