我遇到了Grails 2.3.0的一些非常恼人的问题,其中最令人讨厌的是当我杀死我的Grails应用程序时Tomcat拒绝死亡。如果我从命令行或GGTS运行我的Grails应用程序似乎并不重要,当我停止我的Grails应用程序时Tomcat不会死,所以下次我尝试运行我的Grails应用程序时,我会收到以下警告:
| Error Server failed to start for port 8080: Address already in use: JVM_Bind (Use --stacktrace to see the full trace)
我必须去寻找Tomcat的过程并手动杀死它以释放端口。
我安装了XAMPP,但XAMPP附带的Tomcat安装没有运行。我重命名了XMAPP Tomcat目录以确保。奇怪的是,当我运行我的Grails应用程序时,XAMPP控制面板显示Tomcat已启动(尽管停止按钮不起作用)。
答案 0 :(得分:4)
XAMP附带一个 Apache http服务器而不是 Tomcat ,它的停止按钮不会杀死您的Grails应用程序。它可能显示为已启动,因为它检查http://localhost:8080/
是否在线,但它不验证localhost是来自XAMP还是其他服务器。
尝试使用GGTS
中的红色按钮终止该应用程序确实会失败,这里有一张JIRA票证。同时正确的流程是运行stop-app
命令( ctrl + alt + shift + g < / KBD>)。
答案 1 :(得分:0)
我是一个不耐烦的人,在打开一个新的控制台并使用stop-app
命令工作时,它的工作速度不够快。我制作了这个小批处理文件以加快速度,直到修复完毕。此批处理文件将找到绑定到端口8080并将其终止的进程。
@echo off
for /f "delims=" %%a in ('netstat -aon ^| find ":8080"') do @set netstatRslt=%%a
set pid=%netstatRslt:~-5%
taskkill /f /pid %pid%
答案 2 :(得分:0)
我发现您的代理设置会影响'stop-app关闭tomcat的能力。运行'run-app'时,grails也会侦听服务器端口+ 1(通常为8081)。对该端口的任何请求都会导致服务器关闭。 'stop-app'脚本只是向该端口发出请求。
在我的情况下,我使用'add-proxy'命令配置我的代理,但我没有添加'--noproxy = localhost'参数。我假设当我运行stop-app时它尝试访问localhost:8081虽然代理并且失败,所以服务器没有关闭。一旦我将'--noproxy = localhost'添加到我的代理配置stop-app工作正常。
这也意味着当您在Grails&gt;上按Ctrl + C时提示tomcat已关闭。