向现有方法添加例外

时间:2014-05-29 14:13:35

标签: java

我有一个简单的数据库连接方法,我想添加一个条件,如果连接失败,那么会将电子邮件发送给一个人员列表,告知它无法连接。

我目前的方法是:

public Connection createInitialConnection() throws ClassNotFoundException, SQLException, PollingException
{
    DBConnectionDetails conDetails = new DBConnectionDetails("INITIAL");

    Class.forName(conDetails.getDriver());      
    Connection connInitial = DriverManager.getConnection(conDetails.getUrl(),
                                      conDetails.getUser(), conDetails.getPassword());
    logger.info("Initial connection created" + conDetails.getUrl());

    return connInitial;
}

目前,没有检查连接是否成功,如果它没有连接,那么程序就会继续运行。

我不确定这样做的最佳方式。 if / else或try / catch?

6 个答案:

答案 0 :(得分:2)

log4j等日志库允许您添加一个日志记录追加器,为每个日志条目发送电子邮件(当然您可以按严重性,类别等进行过滤)。因此,当您尝试获取连接并抛出异常时,它应该被异常处理程序捕获并记录,并且记录器将发送电子邮件。

假设您的应用程序具有某种异常处理程序,可以记录未捕获的异常。发生的地方取决于您的应用程序的架构。它可以位于servlet中,位于jsp中的try-catch代码中,也可以位于web应用程序中的专用处理程序中,如struts或spring-mvc。

如果您实现了这一点,您将有办法在记录任何异常时收到通知,它不会受限于数据库连接问题。

答案 1 :(得分:0)

您可以catch阻止发送电子邮件。

try{
    Class.forName(conDetails.getDriver());      
    Connection connInitial = DriverManager.getConnection(conDetails.getUrl(),
                      conDetails.getUser(), conDetails.getPassword());

 }
 catch(SQLException | ClassNotFoundException ex){ // Java 7 needed for multicatch
   // Send the Email.
 }

答案 2 :(得分:0)

也许您应该尝试捕获SQLExcepton,然后发送如下通知:

  try {
    Connection connInitial = DriverManager.getConnection(conDetails.getUrl(), conDetails.getUser(), conDetails.getPassword());
  } catch (SQLException e) {
    //send notification here
  }

答案 3 :(得分:0)

抓住阻止。它总是比if-else

更好
try{

 // your Logic to test the connection

}
catch(Exception ex)
{
 //Code to send the mail if the connection is failed.
}

答案 4 :(得分:0)

你可以使用try {} Catch ..如果你有一个例外没有网络或其他东西。之后你需要检查Connection != null ..这就是你需要的全部

答案 5 :(得分:0)

在catch块中发送电子邮件可能对您的应用程序没问题,但是您面临着如何配置电子邮件的问题。谁应该收到它?多个收件人可能吗?应如何配置发件人,主题和格式并将其传递给邮件程序?如果邮件发生故障怎么办?如果你走这条路,你可能会发现自己正在重新发明现有的解决方案。

如果您正在使用Log4j,那么configure a SMTPAppender对于您现有的记录器可能是个好主意,或者为需要通过电子邮件发送的错误创建记录器。如果您愿意,可以将Log4j配置为仅将appender用于SQL异常(即log4j: Log output of a specific class to a specific appender)。