gpt4 book ai didi

java - Playframework 1.2.5 和 JDBI

转载 作者:行者123 更新时间:2023-11-30 11:37:10 25 4
gpt4 key购买 nike

我正在尝试将 JDBI 与 Play 1.2.5 一起使用,但我遇到了数据库连接耗尽的问题。我正在使用 H2 内存数据库(在 application.conf 中,db=mem)

我已经创建了类来获取使用 Play 的 DB.datasource 的 jdbi 实例,如下所示:

public class Database {      
private static DataSource ds = DB.datasource;

private static DBI getDatabase() {
return new DBI(ds);
}

public static <T> T withDatabase(HandleCallback<T> hc) {
return getDatabase().withHandle(hc);
}

public static <T> T withTransaction(TransactionCallback<T> tc) {
return getDatabase().inTransaction(tc);
}
}

每次我进行数据库调用时,都会创建一个新的 DBI 实例,但它总是包装相同的静态数据源对象 (play.db.DB.datasource)

发生的事情是,一段时间后我得到以下信息:

CallbackFailedException 发生:org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException:java.sql.SQLException:客户端尝试检查连接已超时。

我很困惑,因为 DBI.withHandle() 和 DBI.withTransaction() 的全部意义在于在回调方法完成时关闭连接并释放资源。

我也尝试让 getDatabase() 每次都返回相同的 DBI 实例,但还是出现了同样的问题。

我做错了什么?

最佳答案

呃。原来我在一些没有使用 withHandle() 的旧代码中泄漏了连接。我一升级它,问题就停止了

关于java - Playframework 1.2.5 和 JDBI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com