mysql grails datasource gorm grails-2.0

Cómo hacer que MySQL funcione en grails 2.0



datasource gorm (3)

install-dependency solo descarga el jar y lo coloca en su caché Ivy. Pero no ha declarado que su aplicación tiene una dependencia en ese jar. BuildConfig.groovy tiene una declaración de dependencia comentada para el controlador MySQL. Simplemente elimine el comentario y actualice la versión, si lo desea, y la agregará al classpath de su aplicación. También descargaría el archivo jar a su caché Ivy si no lo hubiera hecho con install-dependency .

Grails 2.0 parece tener algunos cambios en DataSource.groovy y parece que no puedo ejecutar mysql como estaba en 1.3.7

Lo hice grails install-dependency mysql:mysql-connector-java:5.1.16 lugar de simplemente tirar el .jar en lib. Escuché que esta es la manera de hacerlo en estos días.

Esto es lo que he reemplazado en mi DataSource.groovy :

driverClassName = "org.h2.Driver" ... url = "jdbc:h2:mem:devDb;MVCC=TRUE"

Con

driverClassName = "com.mysql.jdbc.Driver" ... url = "jdbc:mysql://localhost:3306/${dbNamer}?autoreconnect=true"

Cambiando, por supuesto, el nombre de usuario, la contraseña y dbNamer a entradas válidas ... ¿Qué estoy haciendo mal? ¿Hay un tutorial de Grails 2.0 que cubra la configuración de mysql?

Me sale este error de monstruo:

| Loading Grails 2.0.0 | Configuring classpath. | Environment set to development..... | Packaging Grails application..... | Compiling 1 source files..... | Running Grails application | Error 2012-01-16 21:39:10,134 [Thread-9] ERROR context.GrailsContextLoader - Error executing bootstraps: 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'': Cannot resolve reference to bean ''hibernateProperties'' while setting bean property ''hibernateProperties''; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''hibernateProperties'': Cannot resolve reference to bean ''dialectDetector'' while setting bean property ''properties'' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' Message: 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'': Cannot resolve reference to bean ''hibernateProperties'' while setting bean property ''hibernateProperties''; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''hibernateProperties'': Cannot resolve reference to bean ''dialectDetector'' while setting bean property ''properties'' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' Line | Method ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by 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'': Cannot resolve reference to bean ''hibernateProperties'' while setting bean property ''hibernateProperties''; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''hibernateProperties'': Cannot resolve reference to bean ''dialectDetector'' while setting bean property ''properties'' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by BeanCreationException: Error creating bean with name ''sessionFactory'': Cannot resolve reference to bean ''hibernateProperties'' while setting bean property ''hibernateProperties''; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''hibernateProperties'': Cannot resolve reference to bean ''dialectDetector'' while setting bean property ''properties'' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by BeanCreationException: Error creating bean with name ''hibernateProperties'': Cannot resolve reference to bean ''dialectDetector'' while setting bean property ''properties'' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by BeanCreationException: Error creating bean with name ''dialectDetector'': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 334 | innerRun in java.util.concurrent.FutureTask$Sync - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 166 | run in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run . . . in java.lang.Thread Caused by SQLNestedException: Cannot load JDBC driver class ''com.mysql.jdbc.Driver'' ->> 1429 | createConnectionFactory in org.apache.commons.dbcp.BasicDataSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 1371 | createDataSource in '''' | 1044 | getConnection in '''' | 334 | innerRun in java.util.concurrent.FutureTask$Sync | 166 | run . . . in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run in java.lang.Thread Caused by ClassNotFoundException: com.mysql.jdbc.Driver ->> 217 | run in java.net.URLClassLoader$1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 205 | findClass in java.net.URLClassLoader | 321 | loadClass in java.lang.ClassLoader | 266 | loadClass in '''' | 1420 | createConnectionFactory in org.apache.commons.dbcp.BasicDataSource | 1371 | createDataSource in '''' | 1044 | getConnection in '''' | 334 | innerRun in java.util.concurrent.FutureTask$Sync | 166 | run . . . in java.util.concurrent.FutureTask | 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor | 603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker ^ 679 | run in java.lang.Thread


Acabo de hacer un grial> limpio y funcionó


Terminé escribiendo un guión maravilloso que prueba la conexión a MySQL. El código sigue Colóquelo en scripts / TestMysql.groovy y ejecútelo como

grails test test-mysql localhost 3306 test-db grails-user grails-password

La primera "prueba" es ejecutar el script en el entorno de prueba, en caso de que haya algún cambio en DataSource.groovy.

Si puede conectarse a MySQL con este script, al menos sabrá la configuración correcta para su DataSource.groovy. En caso de éxito, también imprime la sección dataSource {} para insertarla en DataSource.groovy .

/* Testing grails/GORM connection to mysql * Call this script "scripts/TestMysql.groovy" * Usage: "grails test-mysql" or, to run in another environment, e.g. "grails test test-mysql" * (This is in case you have changed DataSource.groovy and nothing is working.) * * Up to five parameters: * grails test test-mysql <host> <port> <database> <user> <password> * e.g. grails test test-mysql localhost 3306 test root rootpassword. * The database name can also be empty. */ import groovy.sql.Sql includeTargets << grailsScript("_GrailsInit") << grailsScript("_GrailsArgParsing") target(main: "The description of the script goes here!") { def list=argsMap[''params''] def host=list[0] ? list[0] : ''localhost'' def port=list[1] ? list[1] : ''3306'' def db=list[2] ? list[2] : '''' // can leave empty def user=list[3] ? list[3] : ''grails'' def pswd=list[4] ? list[4] : ''grails'' println "Connecting to " + host + ":" + port println "Database:" + db println "User: " + user println "Password: " + pswd def jdbc_string=''jdbc:mysql://'' + host + '':'' + port + ''/'' + db def sql try { sql = Sql.newInstance(jdbc_string, user, pswd, "com.mysql.jdbc.Driver") } catch (com.mysql.jdbc.exceptions.jdbc4.CommunicationsException e) { println "ERROR! Cannot connect to " + host + ":" + port println "Check host, port, your open ports and other firewall settings; try to connect with some other program" println "" println e return } catch (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e) { println "MySQL ERROR, perhaps wrong database name!" println "" println e return } catch (java.sql.SQLException e) { println "MySQL ERROR, perhaps wrong login/password!" println "" println e return } println "SUCCESS! Connected to MySQL" def query = "SHOW DATABASES" println "Executing query " + query + "..." sql.eachRow(query) { println it } println "OK, Done!" println """ dataSource { dbCreate = "create-drop" // one of ''create'', ''create-drop'', ''update'', ''validate'', '''' url = "jdbc:mysql://${host}:${port}/${db}" username="${user}" password="${pswd}" } """ } setDefaultTarget(main)

Actualización : de hecho, una vez que este script estuvo funcionando, fue fácil hacer que Grails también funcione. Solo tenía que hacer que grails clean , eliminar todos los archivos *.class que sobrevivieron, restaurar el DataSource.groovy original y luego grails compile --refresh-dependencies . Luego cambie DataSource.groovy , y funciona como un amuleto.

Aquí está mi trabajo DataSource.groovy :

dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "sa" password = "" } hibernate { cache.use_second_level_cache = true cache.use_query_cache = false cache.region.factory_class = ''net.sf.ehcache.hibernate.EhCacheRegionFactory'' } // environment specific settings environments { development { dataSource { dbCreate = "create-drop" // one of ''create'', ''create-drop'', ''update'', ''validate'', '''' url = "jdbc:mysql://localhost:8890/test" username="grails" password="grails" } } test { dataSource { dbCreate = "update" url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000" } } production { dataSource { dbCreate = "update" url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000" pooled = true properties { maxActive = -1 minEvictableIdleTimeMillis=1800000 timeBetweenEvictionRunsMillis=1800000 numTestsPerEvictionRun=3 testOnBorrow=true testWhileIdle=true testOnReturn=true validationQuery="SELECT 1" } } } }