mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-05 00:56:58 +08:00
Auto-configure SpringLiquibase with Liquibase Customizer
See gh-40986
This commit is contained in:
parent
a55cebd9a3
commit
32f509c0c4
@ -18,9 +18,11 @@ package org.springframework.boot.autoconfigure.liquibase;
|
|||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import liquibase.Liquibase;
|
||||||
import liquibase.UpdateSummaryEnum;
|
import liquibase.UpdateSummaryEnum;
|
||||||
import liquibase.UpdateSummaryOutputEnum;
|
import liquibase.UpdateSummaryOutputEnum;
|
||||||
import liquibase.change.DatabaseChange;
|
import liquibase.change.DatabaseChange;
|
||||||
|
import liquibase.integration.spring.Customizer;
|
||||||
import liquibase.integration.spring.SpringLiquibase;
|
import liquibase.integration.spring.SpringLiquibase;
|
||||||
import liquibase.ui.UIServiceEnum;
|
import liquibase.ui.UIServiceEnum;
|
||||||
|
|
||||||
@ -66,6 +68,7 @@ import org.springframework.util.StringUtils;
|
|||||||
* @author Ferenc Gratzer
|
* @author Ferenc Gratzer
|
||||||
* @author Evgeniy Cheban
|
* @author Evgeniy Cheban
|
||||||
* @author Moritz Halbritter
|
* @author Moritz Halbritter
|
||||||
|
* @author Ahmed Ashour
|
||||||
* @since 1.1.0
|
* @since 1.1.0
|
||||||
*/
|
*/
|
||||||
@AutoConfiguration(after = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
|
@AutoConfiguration(after = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
|
||||||
@ -97,7 +100,7 @@ public class LiquibaseAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
|
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
|
||||||
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
|
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
|
||||||
LiquibaseConnectionDetails connectionDetails) {
|
ObjectProvider<Customizer<Liquibase>> customizer, LiquibaseConnectionDetails connectionDetails) {
|
||||||
SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
|
SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
|
||||||
dataSource.getIfUnique(), connectionDetails);
|
dataSource.getIfUnique(), connectionDetails);
|
||||||
liquibase.setChangeLog(properties.getChangeLog());
|
liquibase.setChangeLog(properties.getChangeLog());
|
||||||
@ -125,6 +128,7 @@ public class LiquibaseAutoConfiguration {
|
|||||||
if (properties.getUiService() != null) {
|
if (properties.getUiService() != null) {
|
||||||
liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name()));
|
liquibase.setUiService(UIServiceEnum.valueOf(properties.getUiService().name()));
|
||||||
}
|
}
|
||||||
|
customizer.ifAvailable(liquibase::setCustomizer);
|
||||||
return liquibase;
|
return liquibase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,9 +29,11 @@ import java.util.function.Consumer;
|
|||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import liquibase.Liquibase;
|
||||||
import liquibase.UpdateSummaryEnum;
|
import liquibase.UpdateSummaryEnum;
|
||||||
import liquibase.UpdateSummaryOutputEnum;
|
import liquibase.UpdateSummaryOutputEnum;
|
||||||
import liquibase.command.core.helpers.ShowSummaryArgument;
|
import liquibase.command.core.helpers.ShowSummaryArgument;
|
||||||
|
import liquibase.integration.spring.Customizer;
|
||||||
import liquibase.integration.spring.SpringLiquibase;
|
import liquibase.integration.spring.SpringLiquibase;
|
||||||
import liquibase.ui.UIServiceEnum;
|
import liquibase.ui.UIServiceEnum;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -83,6 +85,7 @@ import static org.assertj.core.api.Assertions.contentOf;
|
|||||||
* @author Evgeniy Cheban
|
* @author Evgeniy Cheban
|
||||||
* @author Moritz Halbritter
|
* @author Moritz Halbritter
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
|
* @author Ahmed Ashour
|
||||||
*/
|
*/
|
||||||
@ExtendWith(OutputCaptureExtension.class)
|
@ExtendWith(OutputCaptureExtension.class)
|
||||||
class LiquibaseAutoConfigurationTests {
|
class LiquibaseAutoConfigurationTests {
|
||||||
@ -532,6 +535,14 @@ class LiquibaseAutoConfigurationTests {
|
|||||||
assertThat(RuntimeHintsPredicates.resource().forResource("db/changelog/tables/init.sql")).accepts(hints);
|
assertThat(RuntimeHintsPredicates.resource().forResource("db/changelog/tables/init.sql")).accepts(hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
|
||||||
|
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
|
||||||
|
.run(assertLiquibase((liquibase) -> {
|
||||||
|
assertThat(liquibase.getCustomizer()).isNotNull();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
|
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
|
||||||
return (context) -> {
|
return (context) -> {
|
||||||
assertThat(context).hasSingleBean(SpringLiquibase.class);
|
assertThat(context).hasSingleBean(SpringLiquibase.class);
|
||||||
@ -668,6 +679,16 @@ class LiquibaseAutoConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
static class CustomizerConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
Customizer<Liquibase> customizer() {
|
||||||
|
return liquibase -> liquibase.setChangeLogParameter("some key", "some value");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static class CustomH2Driver extends org.h2.Driver {
|
static class CustomH2Driver extends org.h2.Driver {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user