2015-01-19 3 views
2

Когда вы используете Grails для управления соединением MySQL, вам необходимо (чтобы обрабатывать пересоединения) раздел свойств по строкам этого в вашем DataSource. заводной:следует объединить = true или pooled = false для Grails с использованием ресурса базы данных tomcat через JNDI

dataSource { 
    pooled = true 
    driverClassName = "com.mysql.jdbc.Driver" 
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect" 
    properties { 
     maxActive = -1 
     minEvictableIdleTimeMillis=1800000 
     timeBetweenEvictionRunsMillis=1800000 
     numTestsPerEvictionRun=3 
     testOnBorrow=true 
     testWhileIdle=true 
     testOnReturn=true 
     validationQuery="SELECT 1" 
    } 

environments { 
    production{ 
     dataSource { 
      dbCreate = "upate" 
      url = "jdbc:mysql://127.0.0.1:3306/mydb" 
      username = "myuser" 
      password = "mypass" 
     } 

    } 

При переходе на использование пула соединений Tomcat, большинство примеров дают это:

production { 
    dataSource { 
     dbCreate = "update" 
     jndiName = "java:comp/env/revolve" 
    } 

Вопрос 1

Должен ли пул = true или false в DataSource.grovvy для такого типа соединения (т. используя tomcat), или это имеет значение? Есть сообщения, которые говорят, что это ложь, сообщения говорят, что это должно быть правдой, а некоторые не указали это. Если установлено значение «Истина», это означает, что существует пул пулов, но это то, что рекомендуется большинством примеров.

Вопрос 2

игнорировали ли раздел свойства? Если нет, укажите рекомендуемые поля. Из моей пробной версии и ошибки свойства, похоже, игнорируются, в отличие от сообщений, таких как this one.

E.g. validationQuery = "SELECT 1" в свойствах DataSource.java, кажется, игнорируется при использовании JNDI. То есть если я перезапущу БД, приложение Tomcat навсегда потеряло соединение с БД. Если добавить эту же строку в Tomcat context.xml Thusly:

<Resource name="revolve" auth="Container" type="javax.sql.DataSource" 
    maxActive="50" maxIdle="5" maxWait="10000" 
    username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver" 
    validationquery="SELECT 1;" 
    url="jdbc:mysql://127.0.0.1:3306/mydb"/> 

и перезапустить Tomcat, теперь, если я перезапустить базу данных, приложение на Tomcat продолжает работать.

Это означает, что раздел свойств источника данных в DataSource.groovy игнорируется при использовании пула соединений Tomcat.

ответ

5

Вы не хотите объединять JNDI DataSource, потому что это пул соединений на сервере, поэтому вы объединяете объединенные соединения. Это неважно, ваш локальный DataSource будет просто захватывать несколько подключений из пула веб-сервера и «перезапускать» их для вашего приложения, но это не нужно, поскольку основная причина для объединения состоит в том, чтобы избежать времени, необходимого для получения реальный подключение. Это может занять около секунды, но это не долгое время, но повлияет на производительность. Но пул JNDI уже понес эту задержку, поэтому нет никакой выгоды в объединении снова.

Кроме того, вы должны опустить блок свойств, так как эти настройки связаны с тем, как работает ваш локальный пул соединений, но если вы получаете уже собранные соединения, вам не нужно настраивать начальный размер, максимальный размер, независимо от того, для проверки по заимствованию/возврату/и т. д., запроса проверки и т. д. Эти настройки должны быть сделаны в конфигурации пула, которую вы предоставляете через JNDI, и это будет сделано на веб-сервере.

+1

В соответствии с этим ответом в приложении с использованием источника данных jndi, настроенном на сервере weblogic, следующее исключение никогда не должно происходить: weblogic.jdbc.extensions.PoolLimitSQLException. Что касается этого, не могли бы вы помочь в этом отношении? –

Смежные вопросы