我有一个简单的数据库连接方法,我想添加一个条件,如果连接失败,那么会将电子邮件发送给一个人员列表,告知它无法连接。
我目前的方法是:
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?
答案 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)。