java - Java 中的 try-catch-finally block

标签 java amazon-dynamodb try-catch-finally program-flow

根据我的理解,我想遵循最佳实践在最后释放资源以防止任何连接泄漏。这是我在 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/

相关文章:

ios - 尝试将 AWS DynamoDB 与 Swift 3 一起使用时出现很多错误

.net - 最终阻止的目的是什么?

java - 如何将自定义变量保存到 Java 中的 Struts 应用程序的请求中?

尝试从图像字节数组生成缩略图时启动 Java 应用程序

java - 在Spring上使用Jersey时从HK2收到“找不到合适的构造函数”

java - AmazonDynamoDBClient 的线程安全/可重用性/生命周期?

amazon-dynamodb - 如何使用DynamoDBMapper查询仅具有hashKey的具有GSI的Dynamo DB

java - (Android) 从一项 Activity 获取设置到另一项 Activity

Python 错误处理 : finally vs. 新行缩进

c# - 为什么在具有两个进程和输出重定向的代码中没有捕获到 ThreadAbortException?