我需要从给定位置读取属性文件。触发器是一个石英作业,并且在长时间运行的过程中
在这种情况下: 让我们说这项工作每10分钟就会触发一次。
1:00AM trigger1 -> read config.properties -> other logic
1:10AM trigger2 -> read config.properties -> other logic
我们的一个要求是我们需要能够在触发器1和2之间更改config.properties中的值,以确保2使用不同的配置1。
我尝试使用java Properties类和apache commons配置库,并且一旦从第一次触发作业读取属性文件时找到,所有以下属性文件读取都不会选择后面的更改文件。这是通过设计那些java库还是我以错误的方式进行测试?
答案 0 :(得分:3)
第一个答案:这样做不应该有任何问题。你需要做的就是提供"钩子"进入您的应用程序,驱动您的应用程序重新打开属性文件; 重新阅读内容,然后更新 / 重建您的应用所依赖的Properties对象。从概念上来说,没有什么能阻止这种情况 - 我过去曾编写过这样的解决方案。
但是,第二个想法:我怀疑这是一个长期的强大的设计。你看,当我制作我的属性"可重新加载"时,这仅用于测试目的。我希望能够快速更改超时值,例如;无需重新启动整个堆栈。
你想在这里做的完全不同。你想"劫持"一种从未打算用于此类用例的机制,以启用定期的异步更新。我最初的直觉是:不要这样做。如果在写入文件时更新属性会发生什么?如果更新在彼此之后非常短暂会发生什么?
如果您希望外部资源影响应用程序的行为,那么为该要求设计强大的解决方案。不要以为你必须覆盖属性文件,因为属性文件是当前控制你的应用程序的。
答案 1 :(得分:-2)
不确定你是如何引用文件的,但我可以说的一件事是使用协议来获取config.properties,即classpath:vs file:
如果您正在以classpath:config.properties
的形式阅读文件,那么我认为它将始终获得加载类路径时存在的属性文件的第一个版本。
尝试使用文件协议 - file://var/mule/config.properties
,在这种情况下,它始终是从文件系统中重新读取的。
可能会发贴给您的代码供我们查看。