Grails , configuracion de BBDD
Por defecto al arrancar una aplicación grails, se instancia una BBDD en memoria HSQLDB, pero si queremos usar nuestra propia bbdd externa (mas que nada por guardar los datos, no que duren solo durante la ejecución), debemos configurar el archivo grails-app/conf/Datasource.groovy.
Antes de nada, si vamos a usar otra bbdd, por ejeplo Mysql , debemos especificarle que necesitamos la dependencia del driver de Mysql . Para que tenga este paquete es necesario especificarlo en el archivo de configuracion de la aplicacion Grails Buildconfig.groovy.
Añadiremos la siguiente dependencia en el apartado "grails.project.dependency.resolution" y dentro de este en "dependencies", quedara algo asi:
grails.project.dependency.resolution{
dependencies {
// bla bla bla
runtime 'mysql:mysql-connector-java:5.1.14'
}
// bla bla bla
runtime 'mysql:mysql-connector-java:5.1.14'
}
}
Al crear la primera instalacion , nos autogenera este archivo con la configuración por defecto. Dependiendo de la version, suele tener este aspecto:
vemos, que en grails, podemos tener varias configuraciones de nuestra aplicacion conviviendo juntas. Por ejemplo tenemos la configuracion para la bbdd en modo desarrollo , test y como configuraremos nuestra bbdd en produccion.
Para cambiar la bbdd con la que trabajaremos en produccion, estan facil como editar los parametros. Por ejemplo:
En desarrollo, nos interesa que la bbdd se esten generando las tablas cada vez que creamos una clase del Modelo de datos. Asi que nos podria interesar una configuracion asi:
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
pooled = true
url = "jdbc:mysql://localhost/bbddDeveloper"
driverClassName = "com.mysql.jdbc.Driver"
username = "myuser"
password = "mypass"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
}
}
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
pooled = true
url = "jdbc:mysql://localhost/bbddDeveloper"
driverClassName = "com.mysql.jdbc.Driver"
username = "myuser"
password = "mypass"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
}
}
Vemos que la estrategia de generacion de bbdd esta especificada para que borre y cree la tablas cada vez que se arranque el contexto de persistencia. (Ojo, es necesario que exista nuestra bbdd y que nuestro usuario tenga permisos para acceder a ella , tareas del MysqlAministrator y MsqlQueryBrowser)
Su equivalencia en un proyecto normal con un persistence.xml:
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
Y asi con el resto de propiedades. (Grails instancia el contexto de persistencia en su contenedor Spring y le inyecta estas propiedades que tiene mapeadas de manera interna).
Vemos que estamo usando una bbdd en local, un mysql .
En cambio en produccion nos interesa otra estrategia de generacion de bbdd y ademas que la bbdd apunte a otra ip que tengamos configurada. Podria quedar algo asi:
production {
dataSource {
pooled = true
dbCreate = "update"
url = "jdbc:mysql://ipRemota/bbddProduction"
driverClassName = "com.mysql.jdbc.Driver"
username = "produser"
password = "prodpass"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
}
}
dataSource {
pooled = true
dbCreate = "update"
url = "jdbc:mysql://ipRemota/bbddProduction"
driverClassName = "com.mysql.jdbc.Driver"
username = "produser"
password = "prodpass"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
}
}
Cada vez que hagamos grails prod run-app, se buscaran nuevos modelos y solo seran esos las tablas que se generen, manteniendo el esquema antiguo.
Arrancar grails en modo developer (configuraciones en archivos como "developer":
grails run-app
En modo produccion (tomara configuraciones especificadas en archivos como "producction")
grails prod run-app
0elmoOromp_fu Dan Johnson https://wakelet.com/wake/XctiukbkRI0PHNTsEfnjD
ResponderEliminaroldedovic