mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-05 00:56:58 +08:00
Polish "Auto-configure SpringLiquibase with Liquibase Customizer"
See gh-40986
This commit is contained in:
parent
32f509c0c4
commit
6aeab4461e
@ -98,9 +98,9 @@ public class LiquibaseAutoConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
|
SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
|
||||||
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
|
@LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
|
||||||
ObjectProvider<Customizer<Liquibase>> customizer, LiquibaseConnectionDetails connectionDetails) {
|
ObjectProvider<SpringLiquibaseCustomizer> customizers, 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());
|
||||||
@ -128,7 +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);
|
customizers.orderedStream().forEach((customizer) -> customizer.customize(liquibase));
|
||||||
return liquibase;
|
return liquibase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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 {
|
static final class LiquibaseDataSourceCondition extends AnyNestedCondition {
|
||||||
|
|
||||||
LiquibaseDataSourceCondition() {
|
LiquibaseDataSourceCondition() {
|
||||||
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -538,9 +538,7 @@ class LiquibaseAutoConfigurationTests {
|
|||||||
@Test
|
@Test
|
||||||
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
|
void whenCustomizerBeanIsDefinedThenItIsConfiguredOnSpringLiquibase() {
|
||||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
|
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomizerConfiguration.class)
|
||||||
.run(assertLiquibase((liquibase) -> {
|
.run(assertLiquibase((liquibase) -> assertThat(liquibase.getCustomizer()).isNotNull()));
|
||||||
assertThat(liquibase.getCustomizer()).isNotNull();
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
|
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
|
||||||
@ -684,7 +682,7 @@ class LiquibaseAutoConfigurationTests {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
Customizer<Liquibase> customizer() {
|
Customizer<Liquibase> customizer() {
|
||||||
return liquibase -> liquibase.setChangeLogParameter("some key", "some value");
|
return (liquibase) -> liquibase.setChangeLogParameter("some key", "some value");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.
|
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]]
|
[[howto.data-initialization.migration-tool.flyway-tests]]
|
||||||
|
Loading…
Reference in New Issue
Block a user