【发布时间】:2020-08-12 09:16:39
【问题描述】:
我正在使用 Hibernate 5.4.18 和 HikariCP 3.4.5。我的配置是程序化的,我用hibernate.connection.datasource-property 设置了 Hibernate 的底层数据源。奇怪的是,当我调用EntityManagerFactory.close()-function 时,它并没有调用 HikariDataSource 的close()-method,连接将保持打开状态。这是理想的行为吗? Oracle 文档说EntityManagerFactory.close() 将“关闭工厂,释放它拥有的所有资源”。
Kotlin 的最小示例:
fun main() {
val emf = Persistence.createEntityManagerFactory("default", getJpaProperties())
// Fetch underlying HikariDataSource
val ds = emf.unwrap(SessionFactoryImpl::class.java)
.serviceRegistry
.getService<ConnectionProvider>(ConnectionProvider::class.java)
.unwrap(HikariDataSource::class.java)
emf.close()
println(ds.isClosed) // prints "false"
}
private fun getJpaProperties(): Map<String, Any> {
val dataSource = HikariDataSource().apply {
username = "sa"
password = ""
jdbcUrl = "jdbc:h2:mem:test_db"
}
return mapOf(
"hibernate.dialect" to "org.hibernate.dialect.H2Dialect",
"hibernate.connection.datasource" to dataSource
)
}
【问题讨论】:
标签: java hibernate kotlin jpa hikaricp