我们在升级到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并将其删除,但这似乎不够优雅。还有更好的方法吗?
谢谢!
答案 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
最后,您可以公开关闭端口,调用该端口也将启动干净关闭。 (当然不要将该端口暴露给互联网)