繁体   English   中英

在运行时更改 jar/war 文件中的 config.properties 文件并热部署更改?

[英]change a config.properties file in a jar / war file in runtime and hotdeploy the changes?

在运行时更改 jar/war 文件中的 config.properties 文件并热部署更改? 我的要求如下,我们在 jar/war 文件中有一个“config.properties”,我必须通过网页打开该文件,在用户对其进行必要的更改后,我必须更新“config.properties”。 jar/war 文件中的属性”并热部署它。 我们能实现这一壮举吗? 如果是这样,请您将我指向相关网站/文件,以便我可以快速启动。

我强烈建议您的架构师重新考虑此解决方案。 您所描述的应该通过 JNDI 或类似技术完成,而不是通过重新加载属性。

部署应该被认为是静态的 - 任何给定的 web 容器允许魔术不应该依赖,并且有一天会中断(最有可能在最不方便的时候)。

你有几个问题困扰着我:

  1. 确保没有任何东西保存对先前加载config.properties文件的java.util.Properties static引用。

  2. 大多数servlet引擎会将您的war解压到工作目录,因此您加载的属性文件不会是war中的那个,而是解压的。 这意味着当您重新启动servlet 引擎时,您的更改将被覆盖,因为这通常是解压战争的要点之一。

虽然这些问题并非不可克服,但我一直发现通过将属性存储在 JNDI(如 Thorbjørn 建议的那样)或数据库中(同时注意我在第 1 点中提到的静态引用)来实现这种行为要容易得多。

JNDI/数据库解决方案有一个很好的副作用,可以简化部署到多个环境中,因为每个环境通常都有自己的注册表/数据库。

即使我同意之前解释的评论,我也可以提出一种解决方案:

Apache Commons Configuration 扩展使您可以执行以下操作:

config.setReloadingStrategy(new FileChangedReloadingStrategy());

这可能是在运行时更改配置文件的技巧,根本不需要代码。

但是,与 JNDI 和其他 Web 应用程序配置方法一样,安全性是一个问题。 请注意您可以/必须能够配置哪些参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM