先决条件
要求
首先尝试
我已经通过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: 我重新组织了这个问题,不仅要问具体细节。
答案 0 :(得分:1)
该文件由Java类加载器缓存,而不是Camel可以做任何事情。您可能需要使用文件资源而不是类路径加载文件。