2017-07-05 6 views
0

Grails 3でDB接続を行う適切な方法は何ですか? Grailsの2次のコードについてはGrails 3でDB接続を取得する方法

は作品を持っています

((SessionImpl) sessionFactory.getCurrentSession()).connection() // sessionFactory initialized in bootstrap 

しかし、移行は3をGrailsのためにした後、時々私は、ログ内の例外を参照してください。

ます。java.sql.SQLException:操作のResultSet後に許可されていません com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) で終了しました。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 :java_sql_ResultSet $にGetLong $ 3での com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:424) で com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2757)にて1037)。コール(不明なソース)

それはリクエストの0.01%をたまたま

  • Grailsの3.2.11
  • ゴーム6.0.12

答えて

1

私はそれはあなたがそれを必要な場所に依存推測しますが、サービスにDataSourceを注入することができます。

javax.sql.DataSource dataSource 

次に、あなただけのGORM 6(http://gorm.grails.org/6.0.x/hibernate/manual/セクション1.2.1)でモードをフラッシュする

dataSource.getConnection() 

も変化を認識して使用することができます。上流のセーブ/コミットが失敗した場合、結果セットが偶発的に閉じられ、この特定のコード行とはまったく関係がない間にこのようなエラーが発生する可能性があります。私は(非常に一時的に)古いフラッシュモードに戻って、ずっと下を追跡する前に問題がなくなるかどうかを見てみよう!

0

grails docsから、実際のdataSource Beanを取得できます。それからは、接続にアクセスしたり、Hibernateのトランザクションやセッションの問題を避けるために、あなたのデシベル

 

    import groovy.sql.Sql 

    def dataSource 

    println "connection: ${dataSource.connection}" 

    Sql sql = new Sql(dataSource) 
    sql.eachRow("SELECT * FROM note") { row -> 
     println "row: ${row}" 
    } 

使用「dataSourceUnproxied」を照会するためにそれを使用することができます:

 

    def dataSourceUnproxied 

関連する問題