2012-03-03 5 views
8

This article suggerisce che le app di Tomcat 7 devono utilizzare un pool di connessioni JDBC invece di un pool di connessione commons-dbcp. Tuttavia, quest'ultimo è l'impostazione predefinita per un'app Grails e non è ovvio come cambiarlo.configurare l'app Grails per utilizzare il pool di connessioni JDBC

La mia ipotesi è che ho bisogno di definire un bean Spring in resources.groovy che sovrascrive un bean che viene normalmente creato di default, ma non ho idea di cosa debba essere chiamato questo bean o quali proprietà devo impostare.

risposta

12

La cosa più semplice da fare probabilmente è utilizzare il plug-in jdbc-pool. Poiché le opzioni di configurazione per questo pool sono intenzionalmente molto simili a Commons DBCP (sono documentate here), è possibile utilizzare il plug-in per definire la dipendenza da jar e gestire la commutazione della classe. Il plugin non è stato aggiornato in un anno quindi è un po 'datato (il plugin usa la versione 1.0.9.0 ma lo latest is 1.0.9.3) quindi potresti voler definire la dipendenza del plugin escludendo il jar e aggiungerne uno per la versione più recente. È nel repository , quindi dovrai aggiungerlo al tuo BuildConfig.groovy (vedi lo plugin's version per come lo ha fatto).

Ci sono le note di configurazione per il pool here e una serie di post del blog dall'autore here.

Se si vuole configurare questo senza usare il plugin, aggiungere il pronti contro termine e la dipendenza vaso per BuildConfig.groovy:

repositories { 
    inherits true 
    ... 
    ebr() 
} 

dependencies { 
    runtime('org.apache.tomcat:com.springsource.org.apache.tomcat.jdbc:1.0.9.3') { 
     transitive = false 
    } 
} 

e creare un override per il bean dataSource in resources.groovy:

import org.apache.tomcat.jdbc.pool.DataSource 

beans = { 

    dataSource(DataSource) { 
     // mandatory 
     driverClassName = '${dataSource.driverClassName}' 
     username = '${dataSource.username}' 
     password = '${dataSource.password}' 
     url = '${dataSource.url}' 
     // optional 
     minEvictableIdleTimeMillis=1800000 
     timeBetweenEvictionRunsMillis=1800000 
     numTestsPerEvictionRun=3 
     testOnBorrow=true 
     testWhileIdle=true 
     testOnReturn=true 
     validationQuery="SELECT 1" 
    } 
} 

È conveniente utilizzare stringhe con virgolette singole con i segnaposto ${} per sfruttare la funzionalità di segnaposto di proprietà di Spring e mantenere le cose ASCIUTTE dal momento che hai già impostare il driver e collegare le informazioni in DataSource.groovy.

+0

Penso che userò il plugin. Farò una nuova versione di esso, che aggiorna alla versione più recente della lib di pool di connessione JDBC. –

3

In DataSource.groovy Io uso il seguente:

environments { 
    integration { 
     dataSource { 
      pooled = false 
      jndiName = "java:/comp/env/jdbc/myJndiName" 
     } 
    } 
} 

E tutto il resto è definito da Tomcat - questo ha solo bisogno di abbinarlo. Non è necessario definire alcun bean data source in resources.groovy

+1

Questo non funzionerà quando si esegue l'app in modalità sviluppo –

+0

Ah, la tua domanda non ha menzionato la modalità di sviluppo. – doelleri

+0

Voglio che il mio ambiente di sviluppo sia il più simile possibile alla produzione per minimizzare il potenziale di sorprese –