gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:04:57 25 4
gpt4 key购买 nike

先决条件

  • 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com