java - 从外部 Tomcat 目录读取可重新加载的 xml 文件

标签 java xml tomcat apache-camel

先决条件

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

要求

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

先试试

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

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 对象。

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: 我重组了问题,不仅询问具体细节。

最佳答案

该文件由 Java 类加载器缓存,Camel 对此无能为力。您可能需要使用文件资源而不是类路径来加载文件。

关于java - 从外部 Tomcat 目录读取可重新加载的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829601/

相关文章:

c# 使用 XDocument 读取 XML 注释

java - 仅当从 servlet 访问时,带有日语的自定义 404 错误页面在 Tomcat 5 上变得不可读

maven - 尽管 Servlet 在 IntelliJ IDEA 中工作,但在部署到 Tomcat 时无法工作

java - 如何将ArrayList的属性复制到具有不同属性名称的其他ArrayList的另一个属性中?

java - 公钥或私钥作为连接远程数据库的密码,ssh

java - 我将如何设置这个枚举来返回我想要的图像?

java - 使用 JDBC 驱动程序进行 Oracle 插入优化

javascript - 使用 jQuery 从 XML 加载 Highcharts 系列

jquery - 使用 jQuery 解析 Atom feed 时遇到问题

spring - Maven tomcat :run plugin and datasource configuration via JNDI