无法关闭与 MyBatis 的数据库连接
Can't close db connection with MyBatis
我在做什么:
我有一个 AWS Lambda,它是用 Kotlin (JVM) 编写的,它从队列中读取一条消息并在 MySQL table.
上写入一些内容
我为此目的使用 MyBatis,这是我在 Handler 中所做的一个简短的简化片段:
// 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 容器被自动销毁时,它们才会被销毁。
为什么我要关闭所有会话后会出现这种情况?我可以做些什么来防止这种行为?
您正在使用 PooledDataSource
创建连接池。更改为 UnpooledDataSource
,这可能会解决问题。
我在做什么:
我有一个 AWS Lambda,它是用 Kotlin (JVM) 编写的,它从队列中读取一条消息并在 MySQL table.
上写入一些内容我为此目的使用 MyBatis,这是我在 Handler 中所做的一个简短的简化片段:
// 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 容器被自动销毁时,它们才会被销毁。
为什么我要关闭所有会话后会出现这种情况?我可以做些什么来防止这种行为?
您正在使用 PooledDataSource
创建连接池。更改为 UnpooledDataSource
,这可能会解决问题。