我试图使用JDBI与Play 1.2.5和即时通讯有数据库连接用完的问题。我使用H2内存数据库(在application.conf,DB = MEM)Playframework 1.2.5和JDBI
我已经创建的类来获得使用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 occured : org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
我很困惑,因为DBI.withHandle()和DBI.withTransaction()的全部要点是在回调方法完成时关闭连接并释放资源。
我也试过让getDatabase()
每次都返回相同的DBI实例,但是同样的问题发生了。
我在做什么错?
你升级了什么? – hatellla
在我意识到withHandle()之前,我写了一些自己的代码 –