#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
выводится на печать?