2010-08-04 9 views
5

In un'applicazione voglio utilizzare la mia implementazione di javax.sql.DataSource che estende lo standard org.apache.commons.dbcp.BasicDataSource utilizzato da Grails e aggiunge la funzionalità per impostare l'identificativo del client in base alla registrazione correntemente registrata in utente nell'applicazione Grails.Configurazione di Grails per utilizzare la propria implementazione DataSource o per il proxy DataSource standard

Qual è il modo migliore per modificare l'implementazione javax.sql.DataSource sottostante in un'applicazione Grails?

Al momento vedo due possibilità:

  • modificare l'implementazione del DataSource che viene utilizzato da Grails
  • procura il DataSource che viene utilizzato dai Grails e aggiungere la funzionalità con AOP

Qualche suggerimento su come gestire questo requisito?

risposta

4

qui è la mia resources.groovy

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH 

// Place your Spring DSL code here 
beans = { 

    /** 
    * c3P0 pooled data source that forces renewal of DB connections of certain age 
    * to prevent stale/closed DB connections and evicts excess idle connections 
    * Still using the JDBC configuration settings from DataSource.groovy 
    * to have easy environment specific setup available 
    */ 
    dataSource(com.mchange.v2.c3p0.ComboPooledDataSource) { bean -> 
     bean.destroyMethod = 'close' 
     //use grails' datasource configuration for connection user, password, driver and JDBC url 
     user = CH.config.dataSource.username 
     password = CH.config.dataSource.password 
     driverClass = CH.config.dataSource.driverClassName 
     jdbcUrl = CH.config.dataSource.url 
     //force connections to renew after 2 hours 
     maxConnectionAge = 2 * 60 * 60 
     //get rid too many of idle connections after 30 minutes 
     maxIdleTimeExcessConnections = 30 * 60 
    } 

} 

sto usando c3p0 ComboPooledDataSource

+0

Grazie! Mi sembra molto promettente. – stefanglase

+0

Ciao. È ancora valido per Grails 2.3.6? Grazie! –