我有一个需要从给定位置读取属性文件的要求。触发器是一项艰巨的任务,需要长期运行
在这种情况下:
假设该工作每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库的设计还是我以错误的方式进行测试?
最佳答案
第一个答案:这样做应该没有任何问题。您需要做的就是向应用程序中提供“挂钩”,以驱动您的应用程序重新打开属性文件。重新阅读内容,然后更新/重建应用程序所依赖的Properties对象。从概念上讲,没有什么可以阻止这种情况的-过去我已经编码了这样的解决方案。
但是,请再三考虑:从长远来看,我怀疑这是一个可靠的设计。您会看到,当我将属性设为“可重新加载”时,这仅用于测试目的。例如,我希望能够快速更改超时值。无需重新启动整个堆栈。
您在这里要做的是完全不同的。您想“劫持”一种从未用于此类用例的机制,以启用定期的异步更新。我最初的直觉是:不要那样做。如果在写入文件时更新属性,会发生什么?如果更新间隔很短,会发生什么情况?
如果您希望外部源影响应用程序的行为,则可以为该要求设计一个可靠的解决方案。不必仅仅因为属性文件是当今控制您的应用程序的对象就必须重写属性文件。