From 0bf9399709d994fcf63ad3582d04bb76189f7511 Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Wed, 29 May 2024 20:40:46 +0000 Subject: [PATCH 1/4] Upgrade to Liquibase 4.28.0 --- spring-boot-project/spring-boot-dependencies/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index f84897b5bfef..07991b308452 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1054,7 +1054,7 @@ bom { releaseNotes("https://github.com/lettuce-io/lettuce-core/releases/tag/{version}") } } - library("Liquibase", "4.27.0") { + library("Liquibase", "4.28.0") { group("org.liquibase") { modules = [ "liquibase-cdi", From 3e48a00e1d18f594dce87f066a66ac1f2846d77b Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Thu, 30 May 2024 20:56:57 +0200 Subject: [PATCH 2/4] Use Liquibase Customizer. --- .../liquibase/LiquibaseAutoConfiguration.java | 5 +++++ .../LiquibaseAutoConfigurationTests.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java index 2a45b65aa549..70dbd085415e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java @@ -18,9 +18,11 @@ import javax.sql.DataSource; +import liquibase.Liquibase; import liquibase.UpdateSummaryEnum; import liquibase.UpdateSummaryOutputEnum; import liquibase.change.DatabaseChange; +import liquibase.integration.spring.Customizer; import liquibase.integration.spring.SpringLiquibase; import liquibase.ui.UIServiceEnum; @@ -66,6 +68,7 @@ * @author Ferenc Gratzer * @author Evgeniy Cheban * @author Moritz Halbritter + * @author Ahmed Ashour * @since 1.1.0 */ @AutoConfiguration(after = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) @@ -97,6 +100,7 @@ PropertiesLiquibaseConnectionDetails liquibaseConnectionDetails(LiquibasePropert @Bean public SpringLiquibase liquibase(ObjectProvider dataSource, @LiquibaseDataSource ObjectProvider liquibaseDataSource, LiquibaseProperties properties, + ObjectProvider> customizer, LiquibaseConnectionDetails connectionDetails) { SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(), dataSource.getIfUnique(), connectionDetails); @@ -125,6 +129,7 @@ public SpringLiquibase liquibase(ObjectProvider dataSource, if (properties.getUiService() != null) { liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name())); } + liquibase.setCustomizer(customizer.getIfAvailable()); return liquibase; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java index 83d2f7d94aa7..adf8261cf47e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java @@ -29,6 +29,7 @@ import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; +import liquibase.Liquibase; import liquibase.UpdateSummaryEnum; import liquibase.UpdateSummaryOutputEnum; import liquibase.command.core.helpers.ShowSummaryArgument; @@ -68,6 +69,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.contentOf; +import liquibase.integration.spring.*; /** * Tests for {@link LiquibaseAutoConfiguration}. @@ -83,6 +85,7 @@ * @author Evgeniy Cheban * @author Moritz Halbritter * @author Phillip Webb + * @author Ahmed Ashour */ @ExtendWith(OutputCaptureExtension.class) class LiquibaseAutoConfigurationTests { @@ -532,6 +535,14 @@ void shouldRegisterHints() { assertThat(RuntimeHintsPredicates.resource().forResource("db/changelog/tables/init.sql")).accepts(hints); } + @Test + void customizer() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class) + .run(assertLiquibase((liquibase) -> { + assertThat(liquibase.getCustomizer()).isNotNull(); + })); + } + private ContextConsumer assertLiquibase(Consumer consumer) { return (context) -> { assertThat(context).hasSingleBean(SpringLiquibase.class); @@ -668,6 +679,16 @@ public String getPassword() { } + @Configuration(proxyBeanMethods = false) + static class CustomizerConfiguration { + + @Bean + Customizer customizer() { + return liquibase -> liquibase.setChangeLogParameter("some key", "some value"); + } + + } + static class CustomH2Driver extends org.h2.Driver { } From fd82970d7ca8e8935177c85e869d5d93fe06f957 Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Tue, 4 Jun 2024 12:06:53 +0200 Subject: [PATCH 3/4] Format. --- .../liquibase/LiquibaseAutoConfiguration.java | 3 +-- .../liquibase/LiquibaseAutoConfigurationTests.java | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java index 70dbd085415e..5168ad1ff883 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java @@ -100,8 +100,7 @@ PropertiesLiquibaseConnectionDetails liquibaseConnectionDetails(LiquibasePropert @Bean public SpringLiquibase liquibase(ObjectProvider dataSource, @LiquibaseDataSource ObjectProvider liquibaseDataSource, LiquibaseProperties properties, - ObjectProvider> customizer, - LiquibaseConnectionDetails connectionDetails) { + ObjectProvider> customizer, LiquibaseConnectionDetails connectionDetails) { SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(), dataSource.getIfUnique(), connectionDetails); liquibase.setChangeLog(properties.getChangeLog()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java index adf8261cf47e..dc40b3dcc40c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java @@ -33,6 +33,7 @@ import liquibase.UpdateSummaryEnum; import liquibase.UpdateSummaryOutputEnum; import liquibase.command.core.helpers.ShowSummaryArgument; +import liquibase.integration.spring.Customizer; import liquibase.integration.spring.SpringLiquibase; import liquibase.ui.UIServiceEnum; import org.junit.jupiter.api.Test; @@ -69,7 +70,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.contentOf; -import liquibase.integration.spring.*; /** * Tests for {@link LiquibaseAutoConfiguration}. @@ -538,9 +538,9 @@ void shouldRegisterHints() { @Test void customizer() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class) - .run(assertLiquibase((liquibase) -> { - assertThat(liquibase.getCustomizer()).isNotNull(); - })); + .run(assertLiquibase((liquibase) -> { + assertThat(liquibase.getCustomizer()).isNotNull(); + })); } private ContextConsumer assertLiquibase(Consumer consumer) { From ddd7a78539f21f0adaf3c7d3a7154047f7c6bdfd Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Tue, 4 Jun 2024 17:50:40 +0200 Subject: [PATCH 4/4] Set customizer if available. --- .../autoconfigure/liquibase/LiquibaseAutoConfiguration.java | 2 +- .../liquibase/LiquibaseAutoConfigurationTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java index 5168ad1ff883..9780f92050d5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java @@ -128,7 +128,7 @@ public SpringLiquibase liquibase(ObjectProvider dataSource, if (properties.getUiService() != null) { liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name())); } - liquibase.setCustomizer(customizer.getIfAvailable()); + customizer.ifAvailable(liquibase::setCustomizer); return liquibase; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java index dc40b3dcc40c..21dd788e141e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java @@ -536,7 +536,7 @@ void shouldRegisterHints() { } @Test - void customizer() { + void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class) .run(assertLiquibase((liquibase) -> { assertThat(liquibase.getCustomizer()).isNotNull();