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'
    }
}
 
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"
        }
    }

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"
        }
    }

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





Comentarios

Publicar un comentario

Entradas populares de este blog

Subir campos Blob a BBDD (Oracle) con Java

Reiniciar usuario de SVN Subversion

Cucumber y Java - definiendo test de una manera amigable