1

我正在开发一个 Spring MVC 应用程序,该应用程序试图在服务器启动期间通过连接到数据库来初始化某些对象。

我想通过写入日志文件(由应用程序支持团队监控)来提醒我的应用程序支持团队,只要在服务器启动期间出现由下面列出的任一情况引起的问题。

  • 服务器无法自动连接 applicationContext 中指定的任何 bean。
  • 数据库已关闭,无法连接。

我想知道如何以与应用程序服务器/数据库服务器/驱动程序无关的方式捕获上面列出的场景中的错误。我们在开发(jboss)和生产(web sphere)之间使用不同的服务器,还有,有没有办法以数据库服务器/驱动程序不可知的方式记录 sqlexception?

我希望在尝试连接到数据库的数据加载器类中捕获 sqlException,但我不想将所有 sqlException 作为 ALERTS 记录到应用程序支持团队。另外,如果我必须检查特定的 sqlErrorCode,那是否特定于应用程序使用的数据库驱动程序?明天,当我有另一个类加载不同的数据时,我必须再次重复这个过程。相反,当服务器没有启动或连接到数据库时,是否有一种更简单的方法可以跨应用程序执行此操作。

可以使用方面来捕获这些错误(服务器启动和数据库连接问题)吗?

我指的是例外情况,这里是

  • 当自动连接失败时(在这种情况下,由无效的数据源) 22:06:51,767|FLH|||ERROR|org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:308)||Thread-3|Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataLoader': Invocation of init method failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.jboss.util.NestedSQLException: Unable to get managed connection for jdbc/mydatasource; - nested throwable: (javax.resource.ResourceException: Unable to get managed connection for jdbc/mydatasource)

  • 当它无法连接到数据库时 Caused by: java.sql.SQLException: The Network Adapter could not establish the connection at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:480) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:413) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:229) ... 146 more Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:328) at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:421) at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:630) at oracle.net.ns.NSProtocol.connect(NSProtocol.java:206) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:966) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:292) ... 151 more Caused by: java.net.UnknownHostException: server1.somewhere.com at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:127) at oracle.net.nt.ConnOption.connect(ConnOption.java:126) at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:306) ... 156 more

4

1 回答 1

0

@aprajitha - 你可以通过

  1. 对需要报告的错误进行分类。
  2. 实施 Log4j 2 - 这为有效控制日志记录提供了许多选项

例如,您可以根据匹配的过滤条件在特定文件中放置特定错误。通过这种方式,您可以通过简单的记录器配置将异常“报告”依赖项从代码中分离出来。

我很确定您的第一个错误永远不会发生在主要区域,否则它将是部署失败;)

于 2013-02-19T21:06:47.820 回答