日期:2014-05-17  浏览次数:20704 次

java抛什么异常能让tomcat停止?
做项目的时候比如
数据库连接不上,配置文件错误,基本信息加载失败...
这个时候tomcat继续启动也没有什么意义了,java抛个什么异常能让tomcat停止呢?
------最佳解决方案--------------------
...好消息 我找到如何关闭Tomcat服务了 坏消息 只能本地IP使用

首先你的server.xml里 关于上方是设置监听关闭请求端口的地方

<Server port="8005" shutdown="SHUTDOWN">

  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->....


向指定主机的8005端口发送信息"SHUTDOWN"(shutdown属性定义的是啥命令值就是啥) 即可关闭端口 
你可以用JAVA的Socket来做 也可以先用telnet来做

telnet localhost 8005
//然后输入SHUTDOWN

------其他解决方案--------------------
System.exit能让tomcat挂掉
------其他解决方案--------------------
方法一:System.exit()方法,是可以使Tomcat停止的。
方法二:出现你想要的异常,手动调用方法可以杀死Tomcat进程,在Java中有杀死进程的方法,具体可以参考下互联网的搜索结果。
------其他解决方案--------------------

通过抛出异常通过调用操作系统的进程停掉tomcat

System.exit能让tomcat挂掉

可是,有很多时候一个tomcat会部署很多项目的啊

为什么要停掉啊?

------其他解决方案--------------------
楼主。给分了。相较以上的解决方案,俺自认为最优雅的方式:

在你的servlet 或者 jsp 中调用:

try{
    MBeanServer server = MBeanUtils.createServer();
    ObjectName name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
    server.invoke(name, "stop", new Object[0], new String[0]);
} catch (Exception e) {
     e.printStackTrace();
}

然后,tomcat 停止了。就这么简单。

需要的jar文件,tomcat lib目录自带的 catalina.jar。

window tomcat 6 调试通过。
------其他解决方案--------------------
引用:
引用:
请查看 #30楼
难道我木有直入主题么?


那请问你你在28楼又说的什么???
晕.直入...

你问题回答不错,但你又再41楼玩文字游戏...


第一,28楼说的话,比起你所说的话,要平和的多。尊重别人才能赢得别人的尊重。事实上,我就是很不爽你的态度,才参与了这个主题的讨论。大家在关注你的问题,在认真的思索,不管回答是否正确,你都应该感激,而不是不屑。

第二,朋友,这个不是文字游戏。

编程语言作为一门人工语言,我们每天都在通过玩儿所谓的“文字游戏”进行着从problem space到solution space的跨越。这个游戏,要的是精确的描述、直达问题的核心、优雅的解决方式。

从主贴的描述开始,关注这个论题的人就被你带入了一个错误的方向,可以说,你所反感的所谓“不着调”的回答,有一部分原因就在于你描述问题的方式上。事实上,你阐述自己的意图是非常含糊的。

#23 的 BearKin 同学很快理清了解决问题的正确方向,也就是:我们的工作重心是 shutdown tomcat SAFELY。tomcat本身的shutdown.sh脚本就做到了这一点。如果我们对它的实现机制一无所知,那我们就应该围绕这个解决问题的入口做逆向分析。BearKin 同学其实可以走的更远。

不管你是否本意如此,对于“文字游戏”的说法上,我想说的是,Exception 是你在离海岸还不远的时候使用的救生圈,而不是描述、传递、控制对象状态的主要方式。

从你主贴的阐述上,我看到的是,

第一:你的第一直觉是想停止服务,而没有考虑到这种停止 是 shutdown safely 或者是 terminate 甚至是 crash。
第二:你希望能通过一个Exception的抛出去影响容器的状态,虽然你很不买账大家对“用异常终止服务”的异议,但是,我想和你分享我的一个编程准则,即:这种方式是绝对不允许的。
第三:Exception 和 Message 的微妙分野。 异常也是消息,但是,请仔细品味异常的真正使用场合。我举个极端的例子:你甚至可以如下这么写,程序不会报错的。


public Exception handle(){