最后在try catch

时间:2017-04-28 01:22:06

标签: java hadoop hbase try-catch

如果我们在方法中打开数据库连接,并且我们想确保在异常的情况下关闭连接,我们可以将connection.close()放在finally块中。我的问题是,如果关闭连接也会抛出异常怎么办?这段代码应该怎么样?

try {
    conn.open();
    //Do stuff with database
} catch (Exception e) {
    e.printStackTrace();
} finally {
    conn.close(); //Can potentially throw exception.
}

我一直在将“抛出异常”作为方法的一部分。例如:

public void doSomethingWithDB() throws Exception {
    //Method Body
}

如果在conn.close()上抛出异常,大多数情况下连接会自动关闭?或者溪流会保持开放吗?

有关更多上下文,我正在使用Apache Phoenix和HBase,并且遇到了这个问题,因为我正在尝试成为一个更安全的编码器,并且不会意外地保持流向HBase开放。

1 个答案:

答案 0 :(得分:0)

close引发的异常意味着关于连接关闭的某些操作无效。所以很可能并非一切都得到了妥善清理。但是,那时你可能没什么可做的。

通常的做法是使用closeQuietly辅助方法尽可能地关闭并捕获任何异常(可能记录它们)。然后你的应用程序就会开始工作,就好像close一样。

请注意,甚至需要这样的帮助when you use a try-with-resources block