Skip to content

Commit 6aeab44

Browse files
committed
Polish "Auto-configure SpringLiquibase with Liquibase Customizer"
See gh-40986
1 parent 32f509c commit 6aeab44

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ PropertiesLiquibaseConnectionDetails liquibaseConnectionDetails(LiquibasePropert
9898
}
9999

100100
@Bean
101-
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
101+
SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
102102
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
103-
ObjectProvider<Customizer<Liquibase>> customizer, LiquibaseConnectionDetails connectionDetails) {
103+
ObjectProvider<SpringLiquibaseCustomizer> customizers, LiquibaseConnectionDetails connectionDetails) {
104104
SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
105105
dataSource.getIfUnique(), connectionDetails);
106106
liquibase.setChangeLog(properties.getChangeLog());
@@ -128,7 +128,7 @@ public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
128128
if (properties.getUiService() != null) {
129129
liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name()));
130130
}
131-
customizer.ifAvailable(liquibase::setCustomizer);
131+
customizers.orderedStream().forEach((customizer) -> customizer.customize(liquibase));
132132
return liquibase;
133133
}
134134

@@ -177,6 +177,17 @@ private void applyConnectionDetails(LiquibaseConnectionDetails connectionDetails
177177

178178
}
179179

180+
@ConditionalOnClass(Customizer.class)
181+
static class CustomizerConfiguration {
182+
183+
@Bean
184+
@ConditionalOnBean(Customizer.class)
185+
SpringLiquibaseCustomizer customizerSpringLiquibaseCustomizer(Customizer<Liquibase> customizer) {
186+
return (springLiquibase) -> springLiquibase.setCustomizer(customizer);
187+
}
188+
189+
}
190+
180191
static final class LiquibaseDataSourceCondition extends AnyNestedCondition {
181192

182193
LiquibaseDataSourceCondition() {
@@ -243,4 +254,15 @@ public String getDriverClassName() {
243254

244255
}
245256

257+
@FunctionalInterface
258+
private interface SpringLiquibaseCustomizer {
259+
260+
/**
261+
* Customize the given {@link SpringLiquibase} instance.
262+
* @param springLiquibase the instance to configure
263+
*/
264+
void customize(SpringLiquibase springLiquibase);
265+
266+
}
267+
246268
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -538,9 +538,7 @@ void shouldRegisterHints() {
538538
@Test
539539
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
540540
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
541-
.run(assertLiquibase((liquibase) -> {
542-
assertThat(liquibase.getCustomizer()).isNotNull();
543-
}));
541+
.run(assertLiquibase((liquibase) -> assertThat(liquibase.getCustomizer()).isNotNull()));
544542
}
545543

546544
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
@@ -684,7 +682,7 @@ static class CustomizerConfiguration {
684682

685683
@Bean
686684
Customizer<Liquibase> customizer() {
687-
return liquibase -> liquibase.setChangeLogParameter("some key", "some value");
685+
return (liquibase) -> liquibase.setChangeLogParameter("some key", "some value");
688686
}
689687

690688
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ If any of the three properties has not been set, the value of its equivalent `sp
187187

188188
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.
189189

190+
You can also use a `Customizer<Liquibase>` bean if you want to customize the `Liquibase` instance before it is being used.
191+
190192

191193

192194
[[howto.data-initialization.migration-tool.flyway-tests]]

0 commit comments

Comments
 (0)