Successfully reported this slideshow.
Your SlideShare is downloading. ×

Liquibase en action

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 23 Ad

Liquibase en action

Download to read offline

Présentation Liquibase mise à jour pour être plus exhaustive (v2.0.5) avec une démo plus complète.

Merci de mentionner "Florent Biville" en tant qu'auteur original si vous souhaitez reprendre cette présentation.

Présentation Liquibase mise à jour pour être plus exhaustive (v2.0.5) avec une démo plus complète.

Merci de mentionner "Florent Biville" en tant qu'auteur original si vous souhaitez reprendre cette présentation.

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Liquibase en action (20)

Recently uploaded (20)

Advertisement

Liquibase en action

  1. 1. Gestionnaire de migrations
  2. 2. Plan 1. Motivations 2. API 3. Démo 4. Stratégies pour l'existant
  3. 3. Motivations Modifier BDD en continu Industrialiser ses migrations Rapprocher DBA et DÉV
  4. 4. Motivations Refactoring Modifier une portion de code, en maintenant la sémantique de celui-ci.
  5. 5. Motivations Refactoring Principe de substitution de Liskov Couverture de tests ...
  6. 6. Motivations Refactoring de BDD Modifier une partie du schéma (structures, données, triggers, procédures stockées...) tout en maintenant sa sémantique.
  7. 7. Motivations Refactoring de BDD Contrats ? Tests ? Outillage ? http://databaserefactoring.com/
  8. 8. Outillage ● Migrate4J BETA ● FlywayDB ● Liquibase
  9. 9. @author: Nathan Voxland @license: Apache License 2.0 @source: Java (GITHUB) @currentVersion: 2.0.5 / 3.0.0.RC2 @supports: Oracle, MySQL, PostgreSQL, DB2, ...
  10. 10. Concepts Historique Changelog / changesets Preconditions / contexts
  11. 11. Historique DATABASECHANGELOG +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | ID | varchar(63) | NO | PRI | NULL | | | AUTHOR | varchar(63) | NO | PRI | NULL | | | FILENAME | varchar(200) | NO | PRI | NULL | | | DATEEXECUTED | datetime | NO | | NULL | | | ORDEREXECUTED | int(11) | NO | | NULL | | | EXECTYPE | varchar(10) | NO | | NULL | | | MD5SUM | varchar(35) | YES | | NULL | | | DESCRIPTION | varchar(255) | YES | | NULL | | | COMMENTS | varchar(255) | YES | | NULL | | | TAG | varchar(255) | YES | | NULL | | | LIQUIBASE | varchar(20) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+
  12. 12. Changelog ~ point(s) d'entrée <databaseChangeLog xmlns...> <include file="my/company/migrations/9.1/changelog.xml" relativeToChangelogFile="true" /> <include file="my/company/migrations/10.0/changelog.xml" relativeToChangelogFile="true" /> <!-- [...] --> </databaseChangeLog>
  13. 13. Changeset ~ unité de migration Identité = Path + ID + Auteur <changeSet id="exemple_de_changeset" author="florent.biville"> <comment>Vente en ligne de minitels</comment> <createTable tableName="minitels" remarks="EVOL-42"> <column name="id" type="INTEGER" /> </createTable> </changeSet> joué une seule fois sauf si runAlways="true" changements ensuite interdits sauf si runOnChange="true"
  14. 14. Changeset ~ unité de migration Pourquoi XML* ? 1. indépendance vendor 2. rollback automatique 3. utilisation SQL possible ;-) * ou JSON/YAML/"SQL annoté"
  15. 15. Changeset ~ rollback Rollback manuel (SQL ou tags Liquibase standards) <changeSet id="exemple_de_changeset" author="florent.biville"> <comment>Vente en ligne de minitels</comment> <sql>UPDATE Persons SET age = age + 42;</sql> <rollback> UPDATE Persons SET age = age - 42; </rollback> <!-- <rollback /> pour désactiver le rollback sur un changeset --> </changeSet>
  16. 16. Preconditions Requête custom ou tags Liquibase standard <changeSet id="only_as_system" author="florent.biville"> <comment>Un grand pouvoir implique...</comment> <preConditions><!-- DRY: <xi:include href="../common/run_as_system.xml" /> --> <dbms type="oracle" /> <runningAs username="SYSTEM" /> </preConditions> <!-- danger! high voltage! --> </changeSet>
  17. 17. Context Contexte paramétré à l'exécution <changeSet id="exemple_contexte" context="local,test" author="florent.biville"> <!-- danger! high voltage! --> </changeSet> il suffit qu'un seul des contextes corresponde
  18. 18. D ÉM O https://github.com/fbiville/liquibase-demo
  19. 19. Stratégies pour l'existant : initialisation Stratégie n°1 Stratégie n°2 Stratégie n°3 Définir 1 état de référence. Définir toutes les migrations à partir de cet état. Inclure un changeset de dump de la BDD de référence. Définir les migrations ensuite. Reconstruire toutes les migrations manuellement. Y ajouter ensuite un changeset de dump de données.
  20. 20. Stratégies pour l'existant : initialisation Stratégie n°1 Stratégie n°2 Stratégie n°3 + simple - récupération / exécution du dump à la charge de chaque user + simple - couplage fort avec le vendor de BDD + indépendance vis- à-vis du vendor - fastidieux
  21. 21. Stratégies pour l'existant : intégration Spring Maven CLI Utiliser le bean SpringLiquibase. Idéal pour déploiement sur PAAS. Utiliser le plugin Maven. Idéal pour la CI, aussi riche en options que le client CLI. Utiliser l'utilitaire en ligne de commandes. "Implémentation" de référence. autres modes disponibles: Ant, listener de Servlet
  22. 22. CONCLUSION
  23. 23. ?

×