Liquibase en action

1,019 views
864 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,019
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Liquibase en action

  1. 1. Gestionnaire de migrations
  2. 2. Plan1. Motivations2. API3. Démo4. Stratégies pour lexistant
  3. 3. MotivationsModifier BDD en continuIndustrialiser ses migrationsRapprocher DBA et DÉV
  4. 4. MotivationsRefactoringModifier une portion de code, en maintenant lasémantique de celui-ci.
  5. 5. MotivationsRefactoringPrincipe de substitution de LiskovCouverture de tests...
  6. 6. MotivationsRefactoring de BDDModifier une partie du schéma (structures, données, triggers,procédures stockées...) tout en maintenant sa sémantique.
  7. 7. MotivationsRefactoring de BDDContrats ?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. ConceptsHistoriqueChangelog / changesetsPreconditions / contexts
  11. 11. HistoriqueDATABASECHANGELOG+---------------+--------------+------+-----+---------+-------+| 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) dentré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 migrationIdentité = 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 migrationPourquoi XML* ?1. indépendance vendor2. rollback automatique3. utilisation SQL possible ;-)* ou JSON/YAML/"SQL annoté"
  15. 15. Changeset ~ rollbackRollback 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. PreconditionsRequê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. ContextContexte paramétré à lexécution<changeSet id="exemple_contexte" context="local,test"author="florent.biville"><!-- danger! high voltage! --></changeSet>il suffit quun seul des contextes corresponde
  18. 18. DÉMOhttps://github.com/fbiville/liquibase-demo
  19. 19. Stratégies pour lexistant : initialisationStratégie n°1 Stratégie n°2 Stratégie n°3Définir 1 état deréférence.Définir toutes lesmigrations à partir decet état.Inclure un changesetde dump de la BDDde référence.Définir les migrationsensuite.Reconstruire toutesles migrationsmanuellement.Y ajouter ensuite unchangeset de dumpde données.
  20. 20. Stratégies pour lexistant : initialisationStratégie n°1 Stratégie n°2 Stratégie n°3+ simple- récupération /exécution du dump àla charge de chaqueuser+ simple- couplage fort avecle vendor de BDD+ indépendance vis-à-vis du vendor- fastidieux
  21. 21. Stratégies pour lexistant : intégrationSpring Maven CLIUtiliser le beanSpringLiquibase.Idéal pourdéploiement surPAAS.Utiliser le pluginMaven.Idéal pour la CI, aussiriche en options quele client CLI.Utiliser lutilitaire enligne de commandes."Implémentation" deréférence.autres modes disponibles: Ant, listener de Servlet
  22. 22. CONCLUSION
  23. 23. ?

×