在运行时更改 jar/war 文件中的 config.properties 文件并热部署更改?我的要求如下,我们在 jar/war 文件中有一个“config.properties”,我必须通过网页打开该文件,在用户对其进行必要的更改后,我必须更新“config.properties”。 jar/war 文件中的属性”并热部署它。我们能实现这一壮举吗?如果是这样,请您指向相关网站/文件,以便我可以快速开始。
3 回答
我强烈建议您的建筑师重新考虑这个解决方案。您描述的内容应该通过 JNDI 或类似技术完成,而不是通过重新加载属性。
部署应该被认为是静态的——不应依赖任何给定的 Web 容器允许使用魔术,并且有一天会中断(很可能在最不方便的时候)。
你有几个问题在我脑海中浮现:
确保没有任何东西持有对先前加载文件
static
的 a 的引用。java.util.Properties
config.properties
大多数servlet 引擎会将您的 war 解压到工作目录,因此您加载的属性文件不会是 war 中的文件,而是解压后的文件。这意味着当您重新启动servlet 引擎时,您的更改将被覆盖,因为这通常是战争解包的点之一。
虽然这些问题并非不可克服,但我一直发现通过将属性存储在 JNDI(如 Thorbjørn 建议的那样)或数据库中(同时注意我在第 1 点中提到的静态引用)中实现这种行为要容易得多。
JNDI/数据库解决方案具有轻松部署到多个环境的良好副作用,因为每个环境通常都有自己的注册表/数据库。
即使我同意之前解释的评论,我也可以提出一种解决方案:
Apache Commons 配置扩展使您可以执行以下操作:
config.setReloadingStrategy(new FileChangedReloadingStrategy());
这可能会成为在运行时更改配置文件的技巧,而根本不需要任何代码。
但是,与 JNDI 和其他 Web 应用程序配置方法一样,安全性是一个问题。请注意您可以/必须能够配置哪些参数。