【问题标题】:Programmatically set the tomcat jvmRoute以编程方式设置tomcat jvmRoute
【发布时间】:2019-09-10 14:05:18
【问题描述】:

我已经在 Docker 上启动了 6 个 Tomcat 容器。

我不想进入各个容器为每个容器设置server.xml 中的jvmRoute 属性。

我如何以编程方式设置 jvmRoute ,如果说,我想将 jvmRoute 属性命名为 Tomcat1 -> Tomcat9 (或使用其他约定)

【问题讨论】:

  • 是否可以从环境变量中获取名称(或其中的一部分)?
  • 道歉。我刚看到这个。如果我从环境变量中提取它会是什么样子。我会知道这是否是我想要的。
  • 对不起。应该说Java系统属性。如果您在进程通过 -Dfoo=bar 启动时设置了系统属性,那么您可以在 server.xml 中将其用作 jvmRoute="${foo}" 并由 Tomcat 转换为 jvmRoute="bar"。
  • 感谢您的回复。我可以在我自己的应用程序启动时设置这个系统属性,还是我必须编写 java 代码并确保 tomcat 在自己的启动时运行它?
  • 您只需将 -Dfoo=bar 添加到启动 Tomcat 使用的 java 进程的命令行即可。

标签: java apache tomcat load-balancing


【解决方案1】:

我想从上面的 cmets 中总结一下。您可以使用传递给 docker 容器的环境变量从外部控制 jvmRoute 属性。实际上,我在 Kubernetes 中遇到了同样的问题,后来找到了以下解决方案:

在 server.xml 中,我确实在 Engine 标签上设置了以下属性:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="${node_routing_suffix}">

然后,我在 setenv.sh 脚本中添加了这个:

CATALINA_OPTS="${CATALINA_OPTS} -Dnode_routing_suffix=${NODE_ROUTING_SUFFIX}"

现在我可以将环境变量 NODE_ROUTING_SUFFIX 传递给我的容器来设置 jvmRoute。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2021-11-21
    • 2018-11-26
    • 2011-04-18
    • 2012-07-18
    • 2016-02-15
    • 2014-07-26
    • 1970-01-01
    相关资源
    最近更新 更多