Browse Source

Polish "Auto-configure SpringLiquibase with Liquibase Customizer"

See gh-40986
pull/41208/head
Moritz Halbritter 2 years ago
parent
commit
6aeab4461e
  1. 28
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java
  2. 6
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java
  3. 2
      spring-boot-project/spring-boot-docs/src/docs/antora/modules/how-to/pages/data-initialization.adoc

28
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java

@ -98,9 +98,9 @@ public class LiquibaseAutoConfiguration { @@ -98,9 +98,9 @@ public class LiquibaseAutoConfiguration {
}
@Bean
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
ObjectProvider<Customizer<Liquibase>> customizer, LiquibaseConnectionDetails connectionDetails) {
ObjectProvider<SpringLiquibaseCustomizer> customizers, LiquibaseConnectionDetails connectionDetails) {
SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
dataSource.getIfUnique(), connectionDetails);
liquibase.setChangeLog(properties.getChangeLog());
@ -128,7 +128,7 @@ public class LiquibaseAutoConfiguration { @@ -128,7 +128,7 @@ public class LiquibaseAutoConfiguration {
if (properties.getUiService() != null) {
liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name()));
}
customizer.ifAvailable(liquibase::setCustomizer);
customizers.orderedStream().forEach((customizer) -> customizer.customize(liquibase));
return liquibase;
}
@ -177,6 +177,17 @@ public class LiquibaseAutoConfiguration { @@ -177,6 +177,17 @@ public class LiquibaseAutoConfiguration {
}
@ConditionalOnClass(Customizer.class)
static class CustomizerConfiguration {
@Bean
@ConditionalOnBean(Customizer.class)
SpringLiquibaseCustomizer customizerSpringLiquibaseCustomizer(Customizer<Liquibase> customizer) {
return (springLiquibase) -> springLiquibase.setCustomizer(customizer);
}
}
static final class LiquibaseDataSourceCondition extends AnyNestedCondition {
LiquibaseDataSourceCondition() {
@ -243,4 +254,15 @@ public class LiquibaseAutoConfiguration { @@ -243,4 +254,15 @@ public class LiquibaseAutoConfiguration {
}
@FunctionalInterface
private interface SpringLiquibaseCustomizer {
/**
* Customize the given {@link SpringLiquibase} instance.
* @param springLiquibase the instance to configure
*/
void customize(SpringLiquibase springLiquibase);
}
}

6
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java

@ -538,9 +538,7 @@ class LiquibaseAutoConfigurationTests { @@ -538,9 +538,7 @@ class LiquibaseAutoConfigurationTests {
@Test
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
.run(assertLiquibase((liquibase) -> {
assertThat(liquibase.getCustomizer()).isNotNull();
}));
.run(assertLiquibase((liquibase) -> assertThat(liquibase.getCustomizer()).isNotNull()));
}
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
@ -684,7 +682,7 @@ class LiquibaseAutoConfigurationTests { @@ -684,7 +682,7 @@ class LiquibaseAutoConfigurationTests {
@Bean
Customizer<Liquibase> customizer() {
return liquibase -> liquibase.setChangeLogParameter("some key", "some value");
return (liquibase) -> liquibase.setChangeLogParameter("some key", "some value");
}
}

2
spring-boot-project/spring-boot-docs/src/docs/antora/modules/how-to/pages/data-initialization.adoc

@ -187,6 +187,8 @@ If any of the three properties has not been set, the value of its equivalent `sp @@ -187,6 +187,8 @@ If any of the three properties has not been set, the value of its equivalent `sp
See xref:api:java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.html[`LiquibaseProperties`] for details about available settings such as contexts, the default schema, and others.
You can also use a `Customizer<Liquibase>` bean if you want to customize the `Liquibase` instance before it is being used.
[[howto.data-initialization.migration-tool.flyway-tests]]

Loading…
Cancel
Save