当服务器端出现故障时,因为数据库和应用程序不同步,而不是出现错误,并且应用程序崩溃,spring/tomcat 似乎会吞下异常并假装什么也没发生。
你可以说我疯了,但如果程序灾难性地失败,我希望它实际上灾难性地失败!有什么办法可以关闭这种行为吗?当服务器假装一切正常而只是将其放入日志中时,这确实会减慢开发速度。
如果这不是 spring/tomcat 默认设置那么还有什么可能导致它?
不幸的是,我们正在使用大量的库和框架。春天是通常的嫌疑人,但也可能是别的东西。
Update
这是我们正在连接的 sql server 数据库SqlServerDataSource
。项目的某些部分使用了 Hibernate,但用于在登录时查询数据库。在客户端,我们使用 extjs,并且还使用 ExtDirectSpring 来注释客户端与之通信的方法。 Jackson 负责翻译通过网络传输的数据,然后由 extdirect json 处理程序对其进行包装。
有一些 AOP 内容与记录异常有关,但删除该代码会导致相同的行为。
进一步更新
好吧,让你的服务器崩溃不是一个好主意!请参阅下面我的回答,了解我提出的中间立场。
如果您确实想这样做(但恕我直言,您不应该...),您可以使用一个过滤器,一旦应用程序释放未捕获的异常,该过滤器就会阻止应用程序。它可能是这样的:
public class CrashFilter implements Filter {
private boolean crashed = false;
private String msg = "Major problem : application stopped";
@Override
public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException {
if (crashed) {
HttpServletResponse resp = (HttpServletResponse) sr1;
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
return;
}
try {
fc.doFilter(sr, sr1);
}
catch (Exception ex) {
crashed = true;
throw new ServletException(ex);
}
}
// init and destroy omitted from brevity
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)