Liquibase : un gestionnaire de changements de base de données
J’ai découvert ce matin Liquibase qui est un gestionnaire de mise à jour de base de données.
Cela permet donc d’avoir un historique des modifications effectuées dans la base.
Le principe est simple :
1) On dispose d’un fichier .xml qui contient toutes les modification effectuées, par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> <changeSet id="1" author="marc"> <createTable tableName="department"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValueBoolean="true"/> </createTable> </changeSet> </databaseChangeLog> |
2) Ensuite on lance Liquibase qui se charge d’effectuer les opérations de mise à jour de la base. Pour effectuer cette opération, il est possible d’utiliser par exemple un plugin maven :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>2.0.3</version> <configuration> <changeLogFile>src/test/resources/liquibase_test.xml</changeLogFile> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/orioai_indexing_test</url> <username>orioai</username> <password>orioai</password> </configuration> <executions> <execution> <phase>process-resources</phase> <goals> <goal>update</goal> </goals> </execution> </executions> </plugin> |
Parmi les options proposées très intéressantes, grâce à Liquibase on va pouvoir :
- Connaitre le statut de la base par rapport aux opérations décrites dans le fichier xml (mvn liquibase:status)
- Effectuer la mise à jour (mvn liquibase:update)
- Effectuer un rollback à un point donné (mvn -DrollbackCount=1 liquibase:rollback)
Il existe également la possibilité d’utiliser Liquibase via Spring.