【问题标题】:getting a connection object from dataSource in groovy从groovy中的dataSource获取连接对象
【发布时间】:2011-11-09 18:58:20
【问题描述】:

我们的应用程序定义了一个 Datasource.groovy。 我在这样的控制器中使用它

import  javax.sql.DataSource
class xxx {
 javax.sql.DataSource dataSource

 def myappsql = new Sql(dataSource)
 myappsql.row(querystring) .....

}

我需要从数据源中获取连接对象,这样可以直接这样吗:

 Connection conn = myappsql.getConnection()

既然这给了我错误,是否必须是 groovy.sql.Sql 才能进行此调用?

我试图避免使用用户、密码和 url 字符串从头开始创建连接对象,而是重用数据源中声明的对象。

【问题讨论】:

  • 你得到的确切错误是什么?

标签: groovy datasource


【解决方案1】:

您可以依赖注入SessionFactory,而不是依赖注入DataSource

import org.hibernate.SessionFactory
import groovy.sql.Sql

class SomeService {

    static transactional = true
    SessionFactory sessionFactory

    void someMethod() {
        // Get a connection object that participates in the current transaction
        def connection = sessionFactory.currentSession.connection()

       // Use the connection to create a Sql instance
       Sql sql = new Sql(connection)
    }
}

【讨论】:

  • 谢谢大家的提示,现在我从 configurationholder.config.datasource.url ,...用户名,...密码等获取连接所需的个人变量,然后创建连接..所以我删除了连接变量的硬编码
【解决方案2】:

你应该可以做到:

conn = myappsql.datasource.connection

我相信您在construct the Sql object with a datasource 时遇到了错误

【讨论】:

  • 它不起作用..运行 myappsql.dataSource.getconnection() 给了我一个对象,但它与 java.sql.Connection 的类型不同。我打印出 conn 对象,它显示“来自 DataSource [org.apache.commons.dbcp.BasicDataSource@2e7f4425] 的目标连接的事务感知代理”,它应该类似于“com.mysql.jdbc.JDBC4Connection@21ef3faa ” 。我尝试在 Jasper Report 调用中使用另一个连接对象,但它不起作用..
  • @pri_dev 它是什么类型的?我需要再猜一次吗? println myappsql.datasource?.connection?.class?.name 打印出什么?
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2011-06-25
  • 2017-09-03
  • 2018-01-17
  • 2014-09-30
  • 2020-02-18
  • 2012-03-27
  • 1970-01-01
相关资源
最近更新 更多