grails可执行的战争部署

时间:2017-07-11 21:52:21

标签: tomcat grails

我们在升级到Grails 3.3.0(Java 8)时,没有考虑为什么我们让这次升级萎靡不振,我们正在分解我们的Grails 2.2.4(Java 6)整体。这个想法是逐步升级,而不是尝试进行大爆炸升级,这似乎是一件非常好的事情。在我们实现这一目标的同时,我们希望最终得到一些基于服务的东西,而不是单片式的东西。

为了将外部依赖性保持在最低限度,我决定使用可执行的war部署模型,因此当我们将构建工件部署到各种环境时,生产只能根据定义的配置元素而不同。

我已将第一部分移动到Web服务中,并且在我的本地环境中看起来很好;也就是说,我重构了monolith来调用服务,并从命令行使用java -jar运行服务。现在我正在尝试将它与我们的自动构建和部署工具(Bamboo)集成。

我们当前的进程(对于monolith)是停止Tomcat实例(shutdown.sh),部署war,并重启Tomcat(startup.sh)。我怎样才能实现这一点 - 特别是,当它作为可执行的战争运行时,停止正在运行的实例/服务?

我的第一个想法是编写一个脚本,它将找到特定java -jar进程的pid并将其删除,但这似乎不够优雅。还有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

当您创建可执行war / jar时,此脚本[0]嵌入其中,因此您可以执行它UPDATE table1 set value='2' INNER JOIN table2 WHERE CONVERT(value USING utf8) LIKE '%text%')

你可以看到,他们只是将kill命令发送给进程。它是一个中断,所以进程看到并开始一个干净的关闭。如果没有干净地关闭哪个运行./foo.jar stop,也会有一个强制停止。

此脚本的行为与init.d脚本类似,因此您只需将其链接到kill -9并运行/etc/init.d/foo

等命令即可

最后,您可以公开关闭端口,调用该端口也将启动干净关闭。 (当然不要将该端口暴露给互联网)

[0] https://github.com/spring-projects/spring-boot/blob/master/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script