【问题标题】:Changing property values while redeploying new version of .war in tomcat在 tomcat 中重新部署新版本的 .war 时更改属性值
【发布时间】:2012-10-24 09:07:39
【问题描述】:

在我使用 tomcat 作为应用服务器的 Java Web 应用程序中,我对在部署/重新部署应用程序时将不同的值传递给特定属性的方法感兴趣。
我知道有几种方法:

  1. 一种是通过 JVM 选项传递给 setenv.sh 文件中设置的 tomcat。据我所知,每次重新部署都需要重新启动服务器。
  2. 在属性文件中指定属性值。需要在文件中手动设置值,并在每次重新部署相同版本的应用程序之前重建应用程序。
  3. 使用spring时,在applicationContext.xml文件中定义的一些bean中指定属性值。再次需要手动方法和应用程序重建。
  4. 在数据库中存储配置。这要求我们知道存储此类配置的数据库的连接属性。

现在,如果我计划在每次部署/重新部署应用程序时更改某些属性变量,例如 IP 地址、连接数、端口号或其他一些此类变量,我应该遵循什么策略?是否有一种流行的、被广泛接受的方式将此类属性值传递给部署在 tomcat 中的 Web 应用程序?如果我将属性值作为JVM选项传递,是否需要重新启动tomcat服务器?

或者有没有其他通用的方式来配置我上面没有提到的部署参数?我更喜欢可以轻松自动化以编程方式完成的过程(例如传递 JVM 选项),而不是在每次部署之前手动设置属性(例如设置属性文件)。它也不应该要求每次在重新部署之前都重新构建相同的版本。

【问题讨论】:

  • 您在使用数据库吗? - 您可以将它们放在配置数据表中并在启动时读取它们
  • 是的,我正在使用数据库。似乎是一个不错的选择。
  • 这些属性是否会随着服务器或每次在同一服务器上重新部署应用程序而发生变化?
  • 是的,它们可以从服务器更改为服务器。说将它们作为 JVM 选项传递似乎是一个不错的选择。然后,当它以某种集群模式运行时,是否建议重新启动 tomcat 服务器本身。重新启动集群内的一个此类 tomcat 节点以进行新配置是否会损害集群或会话?
  • 可能这个其他问题有帮助:stackoverflow.com/q/12450297/870122

标签: java tomcat web-applications properties jvm-arguments


【解决方案1】:

我认为 JNDI 的发明正是为了满足您的要求:

  • 您不必修改 JVM 选项
  • 您不必每次更改这些选项时都重新启动 Tomcat
  • 您不必重新构建应用程序
  • 您可以从外部/以编程方式更改这些值。我相信 Tomcat 允许这样做,或者即使没有 - 编写类似可设置 MBean 之类的东西应该不难,它会通过 JMX 设置相关属性

【讨论】:

  • 感谢指向 JMX 和 MBean,这将在这里很好地发挥作用。
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 2018-03-15
  • 2017-04-03
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多