2012-10-29 2 views
0


나는 봄과 최대 절전 모드를 사용하여 다중 데이터베이스 서버에서 작업하고, 동시에 2 개의 데이터 소스 구성을 사용하여 업데이트합니다. 사용 중입니다.봄과 최대 절전 모드로 여러 데이터베이스 연결에서 오류/예외를 처리하는 방법은 무엇입니까?

org.springframework.jdbc.datasource.DriverManagerDataSource 

데이터 소스 생성 클래스입니다. 데이터베이스 서버를 가동/실행중인 경우 제대로 작동합니다. 데이터베이스 서버 중 하나를 닫고 예외를 잡으려고하면 catch 블록 에 들어오지 않으며 스택 추적 오류가 내 웹 브라우저에 표시됩니다.

Stack Trace: 
 
    ** BEGIN NESTED EXCEPTION ** 
    java.net.ConnectException 
    MESSAGE: Connection refused: connect 
STACKTRACE: 

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:525) 
    at java.net.Socket.connect(Socket.java:475) 
    at java.net.Socket.(Socket.java:372) 
    at java.net.Socket.(Socket.java:215) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) 
    at com.mysql.jdbc.MysqlIO.(MysqlIO.java:271) 
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 
    at com.mysql.jdbc.Connection.(Connection.java:1555) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:154) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:164) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116) 
    at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:54) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666) 
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546) 
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:686) 
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:1) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683) 
    at com.service.RegistrationServiceImpl.add(RegistrationServiceImpl.java:56) 
    at com.controller.RegistrationController.onSubmit(RegistrationController.java:48) 
    at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:272) 
    at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:268) 
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) 
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:763) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:709) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:613) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Thread.java:619) 


** END NESTED EXCEPTION * 

어떻게이 예외를 처리 할 수 ​​있습니다. 내 DB 서버 중 하나가 다운 된 것을 내 GUI에 표시하고 싶습니다. 내 DB 서버가 다운 된 경우.

도와주세요. 내가 생각

답변

1

두 가지 옵션이 있습니다 :

  • 목록 항목이 있습니다 (같은 RegistrationServiceImpl 예를 들면) 서비스 계층에서 예외를 catch해야합니다,하지만 당신은 모든 서비스 클래스에서이 작업을 수행해야합니다.
  • 이 특정 예외를 포착하고 "미안, 데이터베이스가 다운 됨"과 같은 페이지로 사용자를 리디렉션하는 서블릿 필터를 만듭니다.
1

봄에는 @ExceptionHandler 주석이 있습니다. 당신은 당신의 공통 클래스에서 핸들러 메소드를 생성 할 수 있습니다. 예외가 편리 메시지를 표시 할 수 있습니다 던져 때마다이

@Component 
public class BaseController { 

@ExceptionHandler(Throwable.class) 
public ModelAndView handleException(Throwable throwable, HttpServletRequest request){ 

    ModelAndView view = null; 
    if (throwable instanceof ConnectException){ 
     view = //set message and return view; 
    }else if (throwable instanceof someOtherException) { 
     //do something else; 

//handle as many exceptions as you want 
    }else { 
      //do something by default for other unhandled/generic exceptions 
      } 

    return view; 
} 

} 

documentation 같은 예외를 던져 무엇인가에 따라 원하는 것은 지원되는 반환 형식에 대한 자세한 설명합니다.

@ExceptionHandler(ConnectException.class) 
public ModelAndView handleException(ConnectException ex, HttpServletRequest request){ 
// handle it 
} 

당신은 유사한 라인에이 example을 확인할 수 있습니다

는 또한 핸들러가이 같은 예외의 종류 당신이 원하는 무엇인가를 처리 할 수 ​​있습니다.

이 정보가 도움이되기를 바랍니다. 건배 :)

관련 문제