在 Grails 3 中获取数据库连接的正确方法是什么?
对于 grails 2,以下代码有效:
((SessionImpl) sessionFactory.getCurrentSession()).connection() // sessionFactory initialized in bootstrap
但是迁移到 Grails 3 后有时我会在日志中看到异常:
java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:743) at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1037) at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2757) at com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:424) at java_sql_ResultSet$getLong$3.call(Unknown Source)
0.01% 的请求会发生这种情况
- Grails 3.2.11
- Gorm 6.0.12
最佳答案
我想这取决于您需要它的地方,但您可以将数据源注入(inject)到服务中。
javax.sql.DataSource dataSource
然后你就可以使用
dataSource.getConnection()
另请注意 GORM 6 中刷新模式的更改(http://gorm.grails.org/6.0.x/hibernate/manual/ 第 1.2.1 节)。如果上游保存/提交失败,您的结果集可能会意外关闭并触发如下所示的错误,而实际上与该特定代码行根本没有任何关系。我会(非常暂时地)设置回旧的冲洗模式,看看问题是否消失,然后再进行更多跟踪!
关于grails - 如何在grails 3中获取数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934100/