-
Notifications
You must be signed in to change notification settings - Fork 6
Proceso de migración de base de datos
El procedimiento de migración de BD aparece cuando se necesitan hacer cambios del modelo de datos, que deben ser replicados a la BD.
En entornos de desarrollo estos cambios puede gestionarlos hibernate, estableciendo en la configuración que actualize las modificaciones en el las entidades del proyecto:
<property name="hibernate.hbm2ddl.auto" value="update"/>
Los datos que contiene un entorno de desarrollo no son críticos, pueden modificarse e incluso perderse, por lo que establecer esta configuración permite al desarrollador modificar las entidades mapeadas en BD sin preocuparse por los cambios necesarios en la BD, ya que lo gestionará Hibernate.
En cambio, en el entorno de producción los datos que contiene la BD, son datos "reales" (datos de clientes, datos de proveedores, etc) con lo que no puede aplicarse la actualización mediante hibernate ya que podrían modificarse o perderse datos reales.
Por tanto aparece la necesidad de disponer de un sistema que permita replicar los cambios del modelo de datos en la BD.
La solución que se propone consiste en la creación de unos archivos Delta que son unos "patch" que contienen los cambios para aplicar en la BD en cada nueva release. Así mismo, también debe crearse el proceso "rollback" para poder volver a la versión anterior.
El objetivo, por tanto, consiste en reducir el proceso de migración a una nueva versión o a una versión anterior, mediante la ejecución de los archivos Delta correspondientes.
Para el proceso de migraciones se utiliza Flyway: http://code.google.com/p/flyway/ y se ha integrado en Petstore usando el plugin de maven: http://code.google.com/p/flyway/wiki/MavenPlugin
La configuración únicamente consiste en añadir en el pom.xml:
<plugin> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>1.6.1</version> <configuration> <user>petstore_admin</user> <password>petstore_4dm1n</password> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost/petstore_dev</url> </configuration> </plugin>
Como puede verse, en la configuración se especifica la url de la base de datos así como el usuario y el password. También es necesario indicar el driver a usar para poder "hablar" con la BD.
Por defecto, Flyway buscará los deltas en el siguiente directorio: src/main/resources/db/migration Para controlar las versiones aplicadas y por aplicar, Flyway usa el prefijo de los archivos deltas como se detalla en:http://code.google.com/p/flyway/wiki/SqlMigration
Por ahora se utiliza el prefijo por defecto: V1, V2...Vn (convention over configuration :D), pero puede modificarse.
Para comenzar el proceso de migraciones es necesario:
- Descargar el proyecto Petstore
- Arrancar el servidor MySQL
- Ejecutar el script de creación de base de datos:
mysql -u root -p < src/main/sql/create_databases.sql
mvn flyway:migrate
En el caso que ya hubieramos ejecutado previamente el script de creación de base de datos bastaría con:
-
mvn flyway:clean
(vacia la base de datos) mvn flyway:migrate
El goal migrate del plugin crea una tabla llamada schema_version para mantener el control de deltas ejecutados. Una vez creada la tabla, ejecuta los deltas que existan, y actualiza la tabla schema_version
Para validar que el proceso de migración se ha realizado correctamente, podemos setear la propiedad: <property name="hbm2ddl.auto">
de hibernate a validate. A continuación arrancamos el proyecto y en el caso de que hibernate encuentre alguna inconsistencia entre las entidades y la base de datos dará error.
Si arranca, es que el proceso de migraciones ha ido bien :)