【问题标题】:Customize WAR deployment for Tomcat自定义 Tomcat 的 WAR 部署
【发布时间】:2017-10-18 14:23:10
【问题描述】:

我正在使用带有 Maven 的 Spring Framework (Spring Boot)。我正在 Tomcat 8.5 上(手动)部署 .war。我的应用程序已出售给多个客户。

我有 2 个配置文件。主 application.yml 包含所有安装通用的选项,以及每个安装唯一的 application-custom.yml(数据库凭据、邮件等)。当我更新我的war包时,这个自定义配置文件不能被删除(Tomcat删除配置文件并用最新的war替换它)。但我不希望在每次更新时将自定义文件替换为新文件。

为了修复它,我的 Spring 配置文件实际上(手动)复制到了 Tomcat 的 webapps 路径中(这样更新时不会被删除):

C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\application-custom.yml

但这不是我猜的最佳解决方案。因为在每次新安装时,我必须自己创建自定义配置文件。有没有更好的解决方案?

【问题讨论】:

  • 您应该更好地描述您面临的实际问题,而不是询问您如何实施特定的解决方案。为什么首先需要将 custom.yml 复制到 application.yml ?对“为什么”的解释可能会让您对现成的替代解决方案感到惊讶。
  • 也许你可以使用不同的配置文件——一个用于开发的配置文件和一个用于生产的配置文件?就像 Vilmantas 写的:为什么要将配置文件复制到不同的文件夹中?
  • 谢谢,我换了话题。辅助配置文件是客户特定的。所以即使在更新战争之后它也必须是相同的(因为当我更新战争文件时,Tomcat 将它替换为战争中的那个)。

标签: java spring maven tomcat


【解决方案1】:

每次启动时,您都可以将配置文件移动到安全的地方,例如 /webapps/configs,然后在 Tomcat 提取 .war 文件后将您的配置移回。 为此,您需要修改 bin 文件夹中的 catalina.sh。在这行之后:

elif [ "$1" = "start" ] ; then

添加它以将您的配置移动到安全的地方

cp $CATALINA_HOME/webapps/myApp/WEB-INF/classes/your_config.yml $CATALINA_HOME/webapps/configs

之后:

  if [ ! -z "$CATALINA_PID" ]; then
    echo $! > "$CATALINA_PID"
  fi

  echo "Tomcat started."

在下面添加以将您的配置移回该位置:

cp $CATALINA_HOME/webapps/configs/your_config.yml $CATALINA_HOME/webapps/myApp/WEB-INF/classes

然后使用catalina.sh start启动你的Tomcat

【讨论】:

  • 谢谢,但实际上我想避免进入部署的war文件夹复制粘贴文件,所以如果我需要为每次新​​安装修改Tomcat,我会浪费更多时间。我不能像你说的那样,直接在war包里面吗?
  • 你想把你当前的配置放到war文件中吗?我不明白你为什么要在这种方式上浪费更多的时间?你这样做一次,据我所知,你每次重建都复制粘贴配置文件?
  • 我不是安装应用程序的人,我们有专门的服务来执行此操作。所以我希望安装尽可能简单。
猜你喜欢
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 2012-12-05
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多