Skip to content

Commit 32f509c

Browse files
asashourmhalbritter
authored andcommitted
Auto-configure SpringLiquibase with Liquibase Customizer
See gh-40986
1 parent a55cebd commit 32f509c

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818

1919
import javax.sql.DataSource;
2020

21+
import liquibase.Liquibase;
2122
import liquibase.UpdateSummaryEnum;
2223
import liquibase.UpdateSummaryOutputEnum;
2324
import liquibase.change.DatabaseChange;
25+
import liquibase.integration.spring.Customizer;
2426
import liquibase.integration.spring.SpringLiquibase;
2527
import liquibase.ui.UIServiceEnum;
2628

@@ -66,6 +68,7 @@
6668
* @author Ferenc Gratzer
6769
* @author Evgeniy Cheban
6870
* @author Moritz Halbritter
71+
* @author Ahmed Ashour
6972
* @since 1.1.0
7073
*/
7174
@AutoConfiguration(after = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@@ -97,7 +100,7 @@ PropertiesLiquibaseConnectionDetails liquibaseConnectionDetails(LiquibasePropert
97100
@Bean
98101
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
99102
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
100-
LiquibaseConnectionDetails connectionDetails) {
103+
ObjectProvider<Customizer<Liquibase>> customizer, LiquibaseConnectionDetails connectionDetails) {
101104
SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
102105
dataSource.getIfUnique(), connectionDetails);
103106
liquibase.setChangeLog(properties.getChangeLog());
@@ -125,6 +128,7 @@ public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
125128
if (properties.getUiService() != null) {
126129
liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name()));
127130
}
131+
customizer.ifAvailable(liquibase::setCustomizer);
128132
return liquibase;
129133
}
130134

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@
2929
import javax.sql.DataSource;
3030

3131
import com.zaxxer.hikari.HikariDataSource;
32+
import liquibase.Liquibase;
3233
import liquibase.UpdateSummaryEnum;
3334
import liquibase.UpdateSummaryOutputEnum;
3435
import liquibase.command.core.helpers.ShowSummaryArgument;
36+
import liquibase.integration.spring.Customizer;
3537
import liquibase.integration.spring.SpringLiquibase;
3638
import liquibase.ui.UIServiceEnum;
3739
import org.junit.jupiter.api.Test;
@@ -83,6 +85,7 @@
8385
* @author Evgeniy Cheban
8486
* @author Moritz Halbritter
8587
* @author Phillip Webb
88+
* @author Ahmed Ashour
8689
*/
8790
@ExtendWith(OutputCaptureExtension.class)
8891
class LiquibaseAutoConfigurationTests {
@@ -532,6 +535,14 @@ void shouldRegisterHints() {
532535
assertThat(RuntimeHintsPredicates.resource().forResource("db/changelog/tables/init.sql")).accepts(hints);
533536
}
534537

538+
@Test
539+
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
540+
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
541+
.run(assertLiquibase((liquibase) -> {
542+
assertThat(liquibase.getCustomizer()).isNotNull();
543+
}));
544+
}
545+
535546
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
536547
return (context) -> {
537548
assertThat(context).hasSingleBean(SpringLiquibase.class);
@@ -668,6 +679,16 @@ public String getPassword() {
668679

669680
}
670681

682+
@Configuration(proxyBeanMethods = false)
683+
static class CustomizerConfiguration {
684+
685+
@Bean
686+
Customizer<Liquibase> customizer() {
687+
return liquibase -> liquibase.setChangeLogParameter("some key", "some value");
688+
}
689+
690+
}
691+
671692
static class CustomH2Driver extends org.h2.Driver {
672693

673694
}

0 commit comments

Comments
 (0)