将运行时参数传递给 tomcat 服务器上的 grails 项目

Pass runtime arguments to grails project on tomcat server

我试图在 运行 时将一个变量传递到我的应用程序以配置我的外部配置文件的存储位置。

我需要外部配置文件,这样就可以更改配置,而无需在每次配置更改时都部署新版本,并且希望能够在 运行 时间定义这些文件的位置,因此应用程序更具可移植性,部署应用程序的团队可以遵循关于存储配置的现有规则。

我读过这样的答案: How to add custom "-Djava" arguments to Grails app? - 但我不确定这与我有什么关系,从在我的本地机器上拥有 war 文件,到通过传入的参数部署它。我一直在使用 Tomcat Web 应用程序管理器只需 select 要上传的 war 文件,然后单击 delpoy - 文件已上传并自动展开并启动。

https://grails.github.io/grails-doc/latest/ref/Command%20Line/war.html - 这表明参数必须在创建 war 文件时传入,这不是我想要的。

在我的代码中我有:

grails.config.locations = ["${System.properties['configFolder']}/application-config.properties"]

我正在寻找一种在从应用程序管理器部署时包含参数的方法,或者类似

的命令
deploy myApp.war -DconfigFolder="/usr/share/tomcat5/.grails/myApp/conf/application-config.properties"

编辑

原来你打算在启动 tomcat 服务器时(或之后)传递运行时参数,而不是在部署应用程序时传递。

需要的命令是:

export CATALINA_OPTS="-DconfigLocation=/usr/share/tomcat5/.grails/TAPaS/"

或任何你想要的params/values。

这可以在服务器启动后手动输入,或者您可以在 CATALINA_HOME 目录中创建包含该命令的 setenv.sh 文件。这可以使用 echo $CATALINA_HOME 找到。另一种找到它的方法是使用下面的启动命令,并查看响应,例如

bash catalina.sh start
Using CATALINA_BASE:   /opt/apache-tomcat-7.0.61
Using CATALINA_HOME:   /opt/apache-tomcat-7.0.61
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.61/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/apache-tomcat-7.0.61/bin/bootstrap.jar:/opt/apache-tomcat-7.0.61/bin/tomcat-juli.jar

如果您已将命令添加到setenv.sh 文件,请使用命令bash catalina.sh start 启动服务器。 bash catalina.sh stop 用于阻止它。如果您不在它们的目录中,则需要使用 .sh 文件的路径。


据我所知,这是不可能的。 每当将 .war 文件放入 appBase

  1. 如果 autoDeploy 属性是 "true" 那么应用程序将在 Tomcat 服务器是 运行
  2. 时自动部署
  3. 否则,应用程序将在 Tomcat 服务器启动时部署

    bash /opt/apache-tomcat-7.0.61/bin/shutdown.sh

    bash /opt/apache-tomcat-7.0.61/bin/startup.sh

    将关闭并再次启动服务器,将部署 appBase 中的所有 .war 文件。

我唯一能看到需要实际命令部署的实例是在使用客户端部署程序包时。有关 Tomcat 部署的更多信息,请访问:https://tomcat.apache.org/tomcat-8.0-doc/deployer-howto.html