java - 我应该关闭 AWS lambda 内的 Singleton DB 连接对象吗?

标签 java amazon-web-services aws-lambda

我有一个用java编写的简单的aws lambda(不涉及框架)。 目前,我对 DBConnection 使用了 Singleton 实例,因为只要 lambda 是热的,我就想重复使用早期的 DBconnection 对象。还有,最好的practice建议在处理程序之外编写代码,以实现高效重用并减少运行时间。 我想再次使用相同的数据库连接。但我观察到每次调用 lambda 时都会关闭连接,因此它违背了 Singleton 的目的。为了解决这个问题,我不会关闭创建的连接。 (默认情况下,由于可自动关闭行为,它正在关闭,我现在摆脱了它。) 用于连接的 Singleton 类如下:

 public enum DatabaseConnection {
  
    INSTANCE;
   static Connection CONNECTION = null;
   static String url = "jdbc:URL";
   static String user = "user";
   static String pass = "pwd";
   static 
   {
        try {
            CONNECTION = DriverManager.getConnection(url, user, pass);
        }
        catch (SQLException e) {
        }
    }
    public Connection getConnection(LambdaLogger logger) throws SQLException
    {
        
        if(CONNECTION == null || CONNECTION.isClosed()) {
            CONNECTION = DriverManager.getConnection(url, user, pass);
        }
        
        return CONNECTION;
    }
}

我的问题是:

  1. 如果我不关闭客户端中的连接,会对服务器端产生任何影响吗?
  2. 我应该不必担心,因为 lambda 调用本身在单独的 JVM 中运行,并且如果 JVM 关闭,无论如何连接对象都会被 GC 处理?

这个想法是在没有任何框架的情况下重用 AWS lambda 中的数据库连接对象。

最佳答案

  1. Is there any repercussions on the server-side if I don't close the connection in the client?

应该不会有任何影响。 AWS Lambda 函数创建容器和资源来执行您的代码。当您的 Lambda 函数执行完毕后,仍在运行的后台进程将在下次调用 Lambda 时重用。但是,不保证 AWS 会重复使用相同的容器。所以初始化实际上可能发生。

您可以阅读 Lambda 函数中的卡住/解冻循环 here .

  1. Should I need not worry as lambda invocation runs in a separate JVM itself and if the JVM shuts down, anyway the connection object is GCed?

如果 JVM 关闭,垃圾收集将关闭所有打开的流。如果由于某种原因 JVM 没有关闭连接,操作系统将处理它。这并不能确保它得到适当的处理,但此时,由操作系统决定如何管理进程和资源。

关于java - 我应该关闭 AWS lambda 内的 Singleton DB 连接对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72230147/

相关文章:

java - 如何将删除前导 0 的字符串转换为日期

sql-server - MS CDC 是否可以在没有系统管理员权限的情况下作为 RDS 管理的 SQL Server 的持续复制?

amazon-web-services - AWS - 从/向 AWS 存储传输和检索大规模数据的最佳方式

java - Scala - super 的中缀运算符不能称为中缀

java - 使用 mpxj 读取 asta 文件 (.pp) 时出现异常

javascript - 如何在 Typescript 中模拟 Cognito 响应

python - 从 S3 下载文件时,AWS Lambda 中出现错误 "Read-only file system"

amazon-web-services - 使用 CloudFormation 部署 Lambda 函数时,函数中的 S3Bucket 和 S3Key 是什么

java html5 websocket 服务器和客户端示例?

ios - 将解析迁移到AWS-多个iOS .p12证书