Если я использую класс Groovy SQL в Grails, он использует пул соединений Grails? - PullRequest
7 голосов
/ 17 февраля 2012

Из примеров ниже в документации sql.Если я использую любой из этих способов для создания экземпляра sql в середине класса обслуживания grails, будет ли он использовать пул соединений grails?Будет ли он участвовать в каких-либо транзакционных возможностях?Нужно ли самому закрывать соединение?Или он автоматически вернется в пул?

def db = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver']
  def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)

или если у вас есть существующее соединение (возможно из пула соединений) или источник данных использует один из конструкторов:

  def sql = new Sql(datasource)

Теперь вы можете вызвать sql, например, для создания таблицы:

 sql.execute '''
        create table PROJECT (
          id integer not null,
          name varchar(50),
          url varchar(100),
        )
 '''

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012

Если вы выполните:

Sql.newInstance(...)

Вы создадите новое соединение и не используете пул соединений.

Если вы хотите использовать пул соединений, вы можете создатьСервис с помощью следующей команды:

grails create-service org.foo.MyService

Затем в файле MyService.groovy вы можете управлять транзакциями следующим образом:

import javax.annotation.PostConstruct

class MyService {
    def dataSource              // inject the datasource
    static transactional = true // tell groovy that the service methods will be transactional


    def doSomething() {
       sql = new Sql(dataSource)
       //rest of your code
    }
}

Более подробную информацию вы можете прочитать: http://grails.org/doc/2.0.x/guide/services.html

РЕДАКТИРОВАТЬ:

Для управления несколькими источниками данных вы можете выполнить одно из следующих действий в зависимости от версии Grails.

Если вы используете Grailsверсии выше 1.1.1 (не 2.x) вы можете использовать следующий плагин:

http://grails.org/plugin/datasources

Если вы используете Grails 2.x, вы можете использовать встроенную поддержку:

http://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasources
1 голос
/ 17 февраля 2012

Если вы создадите такой объект Sql, я думаю, он будет использовать пул соединений

class SomeSerive {

  SessionFactory sessionFactory

  def someMethod() {
    Sql sql = new Sql(sessionFactory.currentSession.connection())
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...