【问题标题】:Can't close db connection with MyBatis无法关闭与 MyBatis 的数据库连接
【发布时间】:2018-03-07 13:36:43
【问题描述】:

我在做什么

我有一个用 Kotlin (JVM) 编写的 AWS Lambda,它从队列中读取消息并在 MySQL 表上写入一些内容。

我为此使用了 MyBatis,这是我在 Handler 中所做的简短简化的 sn-p:

// initializing configuration
val dataSource = PooledDataSource(driver, url, username, password)
val environment = Environment(environmentName, JdbcTransactionFactory(), dataSource)
val configuration = Configuration(environment)

try {
    val builder = SqlSessionFactoryBuilder()
    val session = builder.build(configuration).openSession()
    val mapper: CustomMapper = session.getMapper(CustomMapper::class.java)
    mapper.doSomething()
    session.commit()
} finally {
    session.close()
}

我的问题

执行此 Lambda 时,一些连接在数据库上保持打开状态。只有当 lambda 容器被自动销毁时,它们才会被销毁。

既然我要关闭所有会话,为什么会发生这种情况?为了防止这种行为,我能做些什么吗?

【问题讨论】:

  • 你在使用连接池吗?
  • 没有使用任何框架,所以我想我没有。
  • 鉴于您没有向我们展示您是如何获得连接的,我们也无法真正告诉我们,但这可以解释为什么连接保持打开状态。
  • @MarkRotteveel 我已经更新了我的代码 sn-p,每次创建会话时都会生成连接。
  • 请向我们展示您的配置。

标签: java mysql amazon-web-services aws-lambda mybatis


【解决方案1】:

您正在使用创建连接池的PooledDataSource。更改为 UnpooledDataSource 可能会解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多