package com.burtbeckwith.grails.delayds import java.sql.Connection import java.sql.SQLException import org.apache.commons.dbcp.BasicDataSource import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH import org.springframework.jdbc.datasource.DelegatingDataSource class DelayedDataSource extends DelegatingDataSource { private boolean _initialized @Override Connection getConnection() throws SQLException { initialize() return super.getConnection() } @Override void afterPropertiesSet() { // override to not check for targetDataSource since it's lazily created } private synchronized void initialize() { if (_initialized) { return } def config = CH.config.dataSource setTargetDataSource(new BasicDataSource( driverClassName: config.driverClassName, password: config.password, username: config.username, url: config.url)) _initialized = true } }