gpt4 book ai didi

error-handling - 小门: Where to handle JDBC connection error

转载 作者:行者123 更新时间:2023-12-03 08:16:21 25 4
gpt4 key购买 nike

我有一个基于Spring的Wicket应用程序。
有一个池化的数据源bean。
现在,当MySQL死了时,我得到了带有堆栈跟踪的默认Wicket错误页面。

我想处理这种情况,只允许某些页面完全显示(静态页面),并为其他页面显示自定义错误页面。

我应该如何有效地实现呢?

我知道我可以在页面的代码中捕获异常,但这是一种不可靠的MySQL实例,并且经常会崩溃:)或者,请考虑其他类型的不可靠资源。
为每个页面放置一个if似乎效率低下。我想要一些需要资源的页面列表,并将请求重定向到自定义错误页面。

我正在考虑拥有一些全局boolean isResourceReady,以及一些将从该错误开始并定期检查可用性的线程,并最终在资源归还时允许动态页面。

感谢您的提示。

Root cause:

java.net.ConnectException: Connection refused
at ... java.net stuff
... JDBC stuff
... Spring stuff
... DBCP and Pool stuff
... Hibernate stuff
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:88)
at cz.oz.wicket.stack.dao.TestEntityDaoImpl$1.doInJpa(TestEntityDaoImpl.java:36)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:184)
at cz.oz.wicket.stack.dao.TestEntityDaoImpl.createSyntheticTestEntity(TestEntityDaoImpl.java:32)
at cz.oz.wicket.stack.pages.home.HomePage.<init>(HomePage.java:31)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mo

最佳答案

您可能最好使用the normal error page handling in Wicket

但是,如果您希望预期异常而不是对异常使用react,那么这似乎是ServletFilter的自然应用。特别是如果您已经在使用Spring OpenSessionInViewFilter,则可以将其子类化并覆盖

protected Session getSession(SessionFactory sessionFactory) 

以检测到您没有数据库连接,并转到特殊页面。

如果您是通过过滤器执行此操作,则是否仍然要通过某种全局性来决定是否要进入错误页面,但这可能只是您在自己的网站中维护的静态页面的列表WebApplication对象,已经是单例。

关于error-handling - 小门: Where to handle JDBC connection error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com