получение объекта подключения из источника данных в groovy

#groovy #datasource

#groovy #источник данных

Вопрос:

В нашем приложении определен 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 для выполнения этого вызова?

Я пытаюсь избежать создания объекта connection с нуля, с пользователем, паролем и строкой URL и вместо этого повторно использовать объект, объявленный в datasource.

Комментарии:

1. Какую именно ошибку вы получаете?

Ответ №1:

Вместо того, чтобы вводить зависимость DataSource , вы можете вводить зависимость SessionFactory

 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)
    }
}
  

Комментарии:

1. Спасибо, ребята, за советы, на данный момент я получаю индивидуальные переменные, необходимые для подключения, из configurationholder.config.datasource.url, … имя пользователя, … пароль и т.д., А затем создаю connection..so Я удалил жесткое кодирование для переменных подключения

Ответ №2:

Вы должны быть в состоянии сделать:

 conn = myappsql.datasource.connection
  

Я полагаю, что вы получаете ошибку при создании объекта Sql с помощью источника данных

Комментарии:

1. Это не работает .. запуск myappsql.DataSource.getconnection() дает мне объект, но его тип отличается от java.sql.Connection. Я распечатал объект conn, и в нем написано «Прокси с поддержкой транзакций для целевого соединения из источника данных [org.apache.commons.dbcp.BasicDataSource@2e7f4425 ]»где, как и должно быть, что-то вроде «com.mysql.jdbc.JDBC4Connection@21ef3faa » . Я попытался использовать другой объект подключения в моем вызове отчета Jasper, и он не работает..

2. @pri_dev Какой это тип? Должен ли я снова угадывать? Что println myappsql.datasource?.connection?.class?.name выводится на печать?