Liquibase

Changelogs and Changesets

Liquibase describes changes as changesets in XML, YAML, JSON or SQL. Each changeset has an id and author. Liquibase records run changesets in DATABASECHANGELOG and uses DATABASECHANGELOGLOCK so only one instance migrates at a time.

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

Configuration

application.yml

spring:
  liquibase:
    change-log: classpath:db/changelog/db.changelog-master.yaml
  jpa:
    hibernate:
      ddl-auto: validate

A YAML Changelog

databaseChangeLog:
  - changeSet:
      id: 3-add-product-sku
      author: priya
      changes:
        - addColumn:
            tableName: products
            columns:
              - column:
                  name: sku
                  type: varchar(40)
        - sql:
            sql: UPDATE products SET sku = CONCAT('SE-', id) WHERE sku IS NULL
        - addNotNullConstraint:
            tableName: products
            columnName: sku
            columnDataType: varchar(40)
        - addUniqueConstraint:
            tableName: products
            columnNames: sku
            constraintName: uk_products_sku
      rollback:
        - dropColumn:
            tableName: products
            columnName: sku

Tip: Built-in change types (addColumn, createIndex) are translated to the right SQL for each database, and many get automatic rollback.

Startup Log

Running

./mvnw spring-boot:run

Example output

INFO liquibase.lockservice : Successfully acquired change log lock
INFO liquibase.changelog    : Reading from public.databasechangelog
Running Changeset: db/changelog/003-add-product-sku.yaml::3-add-product-sku::priya
INFO liquibase.changelog    : Columns sku(varchar(40)) added to products
INFO liquibase.changelog    : ChangeSet db/changelog/003-add-product-sku.yaml::3-add-product-sku::priya ran successfully in 84ms
INFO liquibase.lockservice  : Successfully released change log lock
INFO o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available
INFO com.shopease.ShopEaseApplication   : Started ShopEaseApplication in 4.2 seconds