Как настроить c3p0 для приложения Grails 2.X с несколькими источниками данных?

Я пытаюсь найти простое решение (возможно, ответ на этот вопрос) для настройки пула соединений c3p0 в веб-приложении Grails 2.X с несколькими источниками данных. Я не смог найти четкую и простую помощь через поиск Google.

Ответ, который я ищу, скажет следующее:

1) Какие баночки нужны

2) Какие файлы Grails необходимо изменить

3) Примеры того, что нужно поместить в эти файлы Grails, включая операторы импорта и пример кода.

Предположим, у меня есть два источника данных в моем приложении, dataSource и dataSource_A, настроенные в DataSource.groovy.

Как настроить пул соединений c3p0 для нескольких источников данных в веб-приложении Grails 2.X?


person twilbrand    schedule 21.09.2012    source источник
comment
Возможно, это поможет вам .   -  person    schedule 21.09.2012
comment
Спасибо, но это не полностью отвечает на вопрос. Мне нужен синтаксис конкретно для второго источника данных. Кроме того, похоже, что это конфигурация Grails 1.X, потому что они все еще используют ConfigurationHolder.   -  person twilbrand    schedule 21.09.2012
comment
Ничего общего с вопросом, но видя, как вы написали ответ, который я ищу, будет... похоже, вы с самого начала фильтруете попытки людей. Вид указывает, почему нет ответа на вопрос. Просто говорю   -  person David D.    schedule 01.10.2012


Ответы (2)


Вот соответствующая документация. В этом блоге приведен пример кода, как отложить создание источника данных в Grails... можно использовать C3P0 в таком коде.

Поскольку Grails поставляется с DBCP по умолчанию, я не считаю уместным добавлять код для настройки пула C3P0 (и позже заменить диспетчер транзакций по умолчанию...), когда можно делегировать DataSource и конфигурацию пула базовому контейнеру, например Tomcat. или ДжейБосс. Поэтому я рекомендую этот способ, и вот пример как настроить C3P0 для Tomcat DataSource, просто добавьте его jar в каталог lib.

Теперь при настройке нескольких источников данных следует обратить внимание на раздел об отсутствии поддержки двухфазной фиксации в Grails.

Если вы ожидаете, что операции, выполняемые с соединениями из ваших двух источников данных, будут включены в одну транзакцию (фиксация обоих в случае успеха, откат для обоих в случае сбоя), вам придется использовать диспетчер транзакций XA.

В этом случае я рекомендую вам выполнить развертывание в JBoss и настроить источники данных и пул в самом JBoss, драйвер JDBC должен быть установлен в библиотеках JBoss.

Вы получите преимущества встроенного менеджера транзакций XA. На стороне Grails источник данных настроен на запрос записи JNDI resource-ref, объявленной в файлах WEB-INF/web.xml и WEB-INF/jboss-web.xml вашего файла WAR.

dataSource {
    jndiName = "java:comp/env/myDataSource"
}
person Yves Martin    schedule 24.09.2012
comment
Соответствующая документация не имеет отношения к вопросу. Я уже знаю, как настроить несколько источников данных для моего проекта Grails. Вопрос заключается в том, как правильно настроить пул соединений c3p0 для этих нескольких источников данных. - person twilbrand; 28.09.2012
comment
Я обновил явные идеи, которые я имел в виду... Моя рекомендация — делегировать конфигурацию DataSource и объединение в базовый контейнер. Он гораздо более гибкий с точки зрения разработки и эксплуатации. - person Yves Martin; 29.09.2012

datasource.groovy/внешний файл конфигурации

   dataSource {
    pooled = true
    dbCreate = "create-drop"
    url = "jdbc:mysql://<ip address>/test1"
    driverClassName = "com.mysql.jdbc.Driver"
    username = "test"
    password = "test123" 
   }

   dataSource_A {
      pooled = true
      dbCreate = "create-drop"
      url = "jdbc:mysql://<ip address>/test2"
      driverClassName = "com.mysql.jdbc.Driver"
      username = "test"
      password = "test123" 
  }

resources.groovy

 dataSource(ComboPooledDataSource) { bean ->
    idleConnectionTestPeriod = 1 * 60 * 60
    testConnectionOnCheckin = true
    bean.destroyMethod = 'close'
    user = grailsApplication.config.dataSource.username
    password = grailsApplication.config.dataSource.password
    driverClass = grailsApplication.config.dataSource.driverClassName
    jdbcUrl = grailsApplication.config.dataSource.url
}


dataSource_A(ComboPooledDataSource) { bean ->

    idleConnectionTestPeriod = 1 * 60 * 60
    testConnectionOnCheckin = true
    bean.destroyMethod = 'close'
    user = grailsApplication.config.dataSource_A.username
    password = grailsApplication.config.dataSource_A.password
    driverClass = grailsApplication.config.dataSource_A.driverClassName
    jdbcUrl = grailsApplication.config.dataSource_A.url

}

c3p0.jar в папке lib проекта.

Это единственные необходимые изменения.

person Nupur    schedule 17.09.2014