Liquibase 4.21.0 Release Notes

Liquibase v4.21.0 is a major release.

See GitHub formatted release notes for more information. Full changelog: 4.20.0–4.21.0 (April 13, 2023)

Notable Changes

[PRO] Observability Initiative - Structured Logging

Structured Logging makes Liquibase operation data easily available for automated monitoring and analysis tools to read, query, and act upon in automated workflows. This feature significantly improves the way Liquibase logs its actions and events to make records machine-readable, easily-ingested, and queryable by industry-standard observability and analysis tools. Learn more at Structured Logging.

Command refactoring

  • Refactor update-to-tag command step (DAT-6641) by @StevenMassaro in #3916
  • Refactor update-to-tag-SQL command step (DAT-6642) by @StevenMassaro in #3917
  • Refactor Rollback and RollbackSQL command by @filipelautert in #3991
  • Refactor ListLocksCommand by @filipelautert in #3952
  • Refactor ReleaseLocksCommand by @filipelautert in #3953
  • Refactoring of rollbackCount[SQL] commands by @filipelautert in #4077
  • Refactor update, updateSql, updateCount, updateCountSql to use Command framework (DAT-6600/DAT-6601) by @abrackx in #3866
  • Refactor update to use command framework DAT-6600 by @abrackx in #849

Enhancements

  • [PRO] New runWithSpoolFile attribute for runWith changesets DAT-12881 by @wwillard7800 in #3864
  • New update summary output table for update commands DAT-13182 by @wwillard7800 in #3812

Security, Driver and other updates

  • [PRO] Bump logback-classic from 1.4.5 to 1.4.6 by @dependabot in #884
  • [PRO] Bump flatten-maven-plugin from 1.3.0 to 1.4.0 by @dependabot in #893
  • [PRO] Bump postgresql from 42.5.4 to 42.6.0 by @dependabot in #892
  • [PRO] Bump jacoco-maven-plugin from 0.8.8 to 0.8.9 by @dependabot in #925
  • [PRO] Snakeyaml 2.0 by @filipelautert in #858
  • Bump targetMavenVersion from 3.8.7 to 3.9.0 by @dependabot in #3785
  • Bump actions/cache from 3.2.6 to 3.3.0 by @dependabot in #3936
  • Bump maven-plugin-plugin from 3.7.1 to 3.8.1 by @dependabot in #3871
  • Bump maven-compiler-plugin from 3.10.1 to 3.11.0 by @dependabot in #3870
  • Bump snowflake-jdbc from 3.13.27 to 3.13.28 by @dependabot in #3863
  • Bump sqlite-jdbc from 3.40.1.0 to 3.41.0.0 by @dependabot in #3862
  • Bump maven-assembly-plugin from 3.4.2 to 3.5.0 by @dependabot in #3
  • Bump snowflake-jdbc from 3.13.28 to 3.13.29 by @dependabot in #3981
  • Bump postgresql from 42.5.4 to 42.6.0 by @dependabot in #3982
  • Bump maven-resources-plugin from 3.3.0 to 3.3.1 by @dependabot in #4025
  • Bump mariadb-java-client from 3.1.2 to 3.1.3 by @dependabot in #4006
  • Bump slf4j-jdk14 from 2.0.6 to 2.0.7 by @dependabot in #3979
  • Bump targetMavenVersion from 3.9.0 to 3.9.1 by @dependabot in #3980
  • Bump actions/cache from 3.3.0 to 3.3.1 by @dependabot in #3948
  • Bump maven-deploy-plugin from 3.1.0 to 3.1.1 by @dependabot in #4026
  • Bump maven-install-plugin from 3.1.0 to 3.1.1 by @dependabot in #4027
  • Bump sqlite-jdbc from 3.41.0.0 to 3.41.2.1 by @dependabot in #4028
  • Upgrade maven-javadoc-plugin version to 3.5.0 by @MalloD12 in #3972
  • Release liquibase-cdi-jakarta to maven repositories by @DCCSKrezovic in #4001
  • Upgrade spring 5 version by @filipelautert in #4015
  • Snakeyaml 2.0 by @filipelautert in #3893
  • Upgrade AdoptOpenJDK bundled in the JVM installer to version 17.0.6+10 by @MalloD12 in #3900

Fixes

  • [PRO] DAT-12881 Implement runWithSpoolFile attribute and createSpool property to control use of Oracle spooling by @wwillard7800 in #843
  • [PRO] DAT-12814: '--rollback-on-error' should return ERROR and return code 1 when update fails by @StevenMassaro in #905
  • [PRO] DAT-13968 Added missing overwrite property by @wwillard7800 in #895
  • [PRO] DAT-13667 Make sure exception from SQLCMD is propagated back to be displayed by @wwillard7800 in #902
  • [PRO] DAT-14096 Handle existence of a file extension when creating spool/sql/log files by @wwillard7800 in #913
  • [PRO] DAT-13994: strip leading slashes from contexts by @StevenMassaro in #921
  • ChangelogSync family to CommandStep refactoring by @filipelautert in #3859
  • Improved concurrency support in ReflectionSerializer by @Dasiu in #3840
  • Make Pattern instance variables and avoid recalculating each time by @arturobernalg in #3656
  • Java 8 improvements by @arturobernalg in #3712
  • Map 'double' to SQL type 'DOUBLE PRECISION' for an Oracle database (CORE-3165) by @maartenc in #3707
  • Rollback Snakeyaml default config to allow duplicate keys by @filipelautert in #3939
  • Upgrades snakeyaml for installer by @filipelautert in #3943
  • DAT-12842 by @sayaliM0412 in #3909
  • Improve use of generics in code by @arturobernalg in #3797
  • DAT-12842 by @sayaliM0412 in #3963
  • Performance Improvement: optimized DatabaseChangeLog.normalizePath() by @nvoxland in #3853
  • Clear entries from MDC map on scope exit by @amrasarfeiniel in #3927
  • [3910] fix missing OSGI manifest entries for service loaders by @jherkel in #3912
  • Fixes #3734 MySQL ENUM and SET column type by @nwcm in #3842
  • Change Index.setTable method to take a Relation parameter DAT-13676 by @wwillard7800 in #3987
  • only set the execType to RERAN, if the changeset was actually executed by @AlexGruebel in #3926
  • Create the change exec listener earlier so that it is available if there is an exception DAT-13939 by @wwillard7800 in #3954
  • [3906] Don't break Liquibase if a resolveable hostname is not found by @filipelautert in #3960
  • Rename ON_MISSING_INCLUDE_FILE configuration and property names by @MalloD12 in #3899
  • Load XSD files under OSGI by @ponziani in #3378
  • Fixes #3083 MySQL JSON length issue by @nwcm in #3849
  • Prevention of NullpointerException (unboxing) in generate-changelog with MS SQL Server by @barthel in #3903
  • Issue 3619 - Allow control of recursion for includeAll via minDepth and maxDepth attributes by @jasonlyle88 in #3620
  • Avoid String concatenation in loop. by @arturobernalg in #3668
  • fix NullPointerException in ResourceAccessor by @StevenMassaro in #4040
  • Lowers message log level. by @filipelautert in #4046
  • Remove potentially sensitive information from --monitor-performance by @nvoxland in #3640
  • Add mirror-console-messages-to-log parameter (DAT-13802) by @abrackx in #4032
  • Do not ignore DatabaseException for Snowflake by @filipelautert in #4034
  • Fix DB-Doc generation of Unique Constraints for Sybase ASE database. by @crenan in #3911
  • Lowers Snakeyaml log level for warning stack traces by @filipelautert in #4062
  • Remove unused parameters and local variables by @arturobernalg in #3857
  • Do not show update summary for updateCountSql or updateTagSql DAT-14107 by @wwillard7800 in #4060
  • add additional information to toString/describe methods of SQLFileChange (DAT-13789) by @StevenMassaro in #4059
  • Update ShowSummary argument reference from CommandUtil class to fix failing integration tests by @MalloD12 in #4073
  • strip leading slashes from contexts (DAT-13994) by @StevenMassaro in #4071
  • Appends the table type to the statement using it. by @filipelautert in #4000
  • Update runner image for pr builds (DAT-14192) by @abrackx in #4094
  • Do not allow custom change types to execute twice DAT-14051 by @wwillard7800 in #4054
  • Disables buffered log service if not using hub by @filipelautert in #3969
  • Fixes UnsupportedOperationException thrown in SpringResourceAccessor in Spring Boot 3 Native Image by @justin-tay in #3959
  • Do not repeat MDC logging by @filipelautert in #4088
  • Implement Strict global configuration support to control whether non-empty author attribute is allowed or not by @MalloD12 in #4044
  • Read Snowflake views definitions with the Snowflake-specific query by @LonwoLonwo in #3794
  • Fixed #3745 error generation intType when using autoIncrement=true with H2 V2 by @quonas in #4008
  • log generated databasechangelogsql without erroneously incrementing the order executed by 2 (DAT-13680) by @StevenMassaro in #4097
  • Remove native executor name property (DAT-13580) by @abrackx in #4108

New Contributors

  • @maartenc made their first contribution in #3707
  • @amrasarfeiniel made their first contribution in #3927
  • @nwcm made their first contribution in #3842
  • @AlexGruebel made their first contribution in #3926
  • @ponziani made their first contribution in #3378
  • @barthel made their first contribution in #3903
  • @DCCSKrezovic made their first contribution in #4001
  • @justin-tay made their first contribution in #3959
  • @quonas made their first contribution in #4008