Mysql – ERROR pool.ConnectionPool – Unable to create initial connections of pool

grailsMySQL

I am Grails newbie. After doing some basic configuration in Datasource.groovy, my grails app fails to start. I get the below error

Error 2015-07-03 15:27:19,014 [localhost-startStop-1] ERROR pool.ConnectionPool  - Unable to create initial connections of pool.

Message: Driver:org.h2.Driver@78f95cf6 returned null for URL:jdbc:mysql://localhost:3306/radb?createDatabaseIfNotExist=true

| Error 2015-07-03 15:27:19,854 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener – Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.NullPointerException

The database radb exists. I have verified it

My Datasource.groovy file for reference as below

dataSource {
    pooled = true
    jmxExport = true
    driverClassName =  "org.h2.Driver"
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
    //username = "sa"
    //password = ""
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
//    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:mysql://localhost:3306/radb?createDatabaseIfNotExist=true"
            username="root"
            password="root"
            logSql = true
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
            properties {
               // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
               jmxEnabled = true
               initialSize = 5
               maxActive = 50
               minIdle = 5
               maxIdle = 25
               maxWait = 10000
               maxAge = 10 * 60000
               timeBetweenEvictionRunsMillis = 5000
               minEvictableIdleTimeMillis = 60000
               validationQuery = "SELECT 1"
               validationQueryTimeout = 3
               validationInterval = 15000
               testOnBorrow = true
               testWhileIdle = true
               testOnReturn = false
               jdbcInterceptors = "ConnectionState"
               defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
            }
        }
    }
}

Best Answer

your driverClassName is wrong. use the correct one for mysql (in the environments, e.g. com.mysql.jdbc.Driver), where you need mysql. right now you have:

default: driver=h2, dialect=mysql; 
dev: url=mysql
prod: url=h2

you definetly want to clean this up. also make sure, you have the driver in your deps.

Related Topic