根据我的理解,我想遵循最佳实践在最后释放资源以防止任何连接泄漏。这是我在 HelperClass 中的代码。
public static DynamoDB getDynamoDBConnection()
{
try
{
dynamoDB = new DynamoDB(new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
}
catch(AmazonServiceException ase)
{
//ase.printStackTrace();
slf4jLogger.error(ase.getMessage());
slf4jLogger.error(ase.getStackTrace());
slf4jLogger.error(ase);
}
catch (Exception e)
{
slf4jLogger.error(e);
slf4jLogger.error(e.getStackTrace());
slf4jLogger.error(e.getMessage());
}
finally
{
dynamoDB.shutdown();
}
return dynamoDB;
}
我的疑问是,既然无论如何都会执行 finally block ,那么 dynamoDB 是否会返回空连接,因为它将在 finally block 中关闭,然后执行返回 声明? TIA。
最佳答案
你的理解是正确的。 dynamoBD.shutdown()
将始终在 return dynamoDB
之前执行。
我不熟悉你正在使用的框架,但我可能会按如下方式组织代码:
public static DynamoDB getDynamoDBConnection()
throws ApplicationSpecificException {
try {
return new DynamoDB(new AmazonDynamoDBClient(
new ProfileCredentialsProvider()));
} catch(AmazonServiceException ase) {
slf4jLogger.error(ase.getMessage());
slf4jLogger.error(ase.getStackTrace());
slf4jLogger.error(ase);
throw new ApplicationSpecificException("some good message", ase);
}
}
并将其用作
DynamoDB con = null;
try {
con = getDynamoDBConnection();
// Do whatever you need to do with con
} catch (ApplicationSpecificException e) {
// deal with it gracefully
} finally {
if (con != null)
con.shutdown();
}
您还可以为您的 dynamoDB 连接创建一个 AutoCloseable
包装器(在 close
中调用 shutdown
)并执行
try (DynamoDB con = getDynamoDBConnection()) {
// Do whatever you need to do with con
} catch (ApplicationSpecificException e) {
// deal with it gracefully
}
关于java - Java 中的 try-catch-finally block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936623/