From a2680efadbb13cbb6d8c6cf3601e38cff9b18e5c Mon Sep 17 00:00:00 2001 From: ferengra Date: Sat, 7 Mar 2020 17:45:51 +0100 Subject: [PATCH] Add clearCheckSums to Liquibase auto configuration Liquibase auto configuration is extended with clearCheckSums to allow to clear all checksums in the current changelog, so they will be recalculated upon the next update. See gh-20417 --- .../liquibase/LiquibaseAutoConfiguration.java | 2 ++ .../liquibase/LiquibaseProperties.java | 15 +++++++++++++++ .../LiquibaseAutoConfigurationTests.java | 10 ++++++++++ 3 files changed, 27 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 a393ce33095..d6df5e595af 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 @@ -64,6 +64,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; * @author Dominic Gunn * @author Dan Zheng * @author András Deák + * @author Ferenc Gratzer * @since 1.1.0 */ @Configuration(proxyBeanMethods = false) @@ -107,6 +108,7 @@ public class LiquibaseAutoConfiguration { liquibase.setDatabaseChangeLogTable(this.properties.getDatabaseChangeLogTable()); liquibase.setDatabaseChangeLogLockTable(this.properties.getDatabaseChangeLogLockTable()); liquibase.setDropFirst(this.properties.isDropFirst()); + liquibase.setClearCheckSums(this.properties.isClearCheckSums()); liquibase.setShouldRun(this.properties.isEnabled()); liquibase.setLabels(this.properties.getLabels()); liquibase.setChangeLogParameters(this.properties.getParameters()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java index 78f486e2f48..dbbf46783e9 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java @@ -29,6 +29,7 @@ import org.springframework.util.Assert; * * @author Marcel Overdijk * @author Eddú Meléndez + * @author Ferenc Gratzer * @since 1.1.0 */ @ConfigurationProperties(prefix = "spring.liquibase", ignoreUnknownFields = false) @@ -74,6 +75,12 @@ public class LiquibaseProperties { */ private boolean dropFirst; + /** + * Whether to clear all checksums in the current changelog, so they will be + * recalculated next update. + */ + private boolean clearCheckSums; + /** * Whether to enable Liquibase support. */ @@ -187,6 +194,14 @@ public class LiquibaseProperties { this.dropFirst = dropFirst; } + public boolean isClearCheckSums() { + return this.clearCheckSums; + } + + public void setClearCheckSums(boolean clearCheckSums) { + this.clearCheckSums = clearCheckSums; + } + public boolean isEnabled() { return this.enabled; } 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 9dc07096011..88c03395346 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 @@ -69,6 +69,7 @@ import static org.assertj.core.api.Assertions.contentOf; * @author Dominic Gunn * @author András Deák * @author Andrii Hrytsiuk + * @author Ferenc Gratzer */ @ExtendWith(OutputCaptureExtension.class) class LiquibaseAutoConfigurationTests { @@ -106,6 +107,7 @@ class LiquibaseAutoConfigurationTests { assertThat(liquibase.getContexts()).isNull(); assertThat(liquibase.getDefaultSchema()).isNull(); assertThat(liquibase.isDropFirst()).isFalse(); + assertThat(liquibase.isClearCheckSums()).isFalse(); })); } @@ -143,6 +145,7 @@ class LiquibaseAutoConfigurationTests { assertThat(liquibase.getDatabaseChangeLogLockTable()) .isEqualTo(properties.getDatabaseChangeLogLockTable()); assertThat(liquibase.isDropFirst()).isEqualTo(properties.isDropFirst()); + assertThat(liquibase.isClearCheckSums()).isEqualTo(properties.isClearCheckSums()); assertThat(liquibase.isTestRollbackOnUpdate()).isEqualTo(properties.isTestRollbackOnUpdate()); })); } @@ -189,6 +192,13 @@ class LiquibaseAutoConfigurationTests { .run(assertLiquibase((liquibase) -> assertThat(liquibase.isDropFirst()).isTrue())); } + @Test + void overrideClearCheckSums() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.liquibase.clear-check-sums:true") + .run(assertLiquibase((liquibase) -> assertThat(liquibase.isClearCheckSums()).isTrue())); + } + @Test void overrideDataSource() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)