|
19 | 19 | import javax.sql.DataSource;
|
20 | 20 |
|
21 | 21 | import liquibase.Liquibase;
|
| 22 | +import liquibase.Scope; |
22 | 23 | import liquibase.UpdateSummaryEnum;
|
23 | 24 | import liquibase.UpdateSummaryOutputEnum;
|
24 | 25 | import liquibase.change.DatabaseChange;
|
|
30 | 31 | import org.springframework.aot.hint.RuntimeHints;
|
31 | 32 | import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
32 | 33 | import org.springframework.beans.factory.ObjectProvider;
|
33 |
| -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; |
34 | 34 | import org.springframework.boot.autoconfigure.AutoConfiguration;
|
35 | 35 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
36 | 36 | import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
|
@@ -103,7 +103,9 @@ PropertiesLiquibaseConnectionDetails liquibaseConnectionDetails(LiquibasePropert
|
103 | 103 | @Bean
|
104 | 104 | SpringLiquibase liquibase(ObjectProvider<DataSource> dataSource,
|
105 | 105 | @LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties,
|
106 |
| - ObjectProvider<SpringLiquibaseCustomizer> customizers, LiquibaseConnectionDetails connectionDetails) { |
| 106 | + ObjectProvider<SpringLiquibaseCustomizer> customizers, LiquibaseConnectionDetails connectionDetails, |
| 107 | + Environment environment) { |
| 108 | + registerLiquibaseConfigurationValueProvider(environment); |
107 | 109 | SpringLiquibase liquibase = createSpringLiquibase(liquibaseDataSource.getIfAvailable(),
|
108 | 110 | dataSource.getIfUnique(), connectionDetails);
|
109 | 111 | liquibase.setChangeLog(properties.getChangeLog());
|
@@ -155,6 +157,20 @@ private SpringLiquibase createSpringLiquibase(@Nullable DataSource liquibaseData
|
155 | 157 | return liquibase;
|
156 | 158 | }
|
157 | 159 |
|
| 160 | + private void registerLiquibaseConfigurationValueProvider(Environment environment) { |
| 161 | + liquibase.configuration.LiquibaseConfiguration liquibaseConfiguration = Scope.getCurrentScope() |
| 162 | + .getSingleton(liquibase.configuration.LiquibaseConfiguration.class); |
| 163 | + |
| 164 | + // Remove any previously registered instance of our provider class |
| 165 | + liquibaseConfiguration.getProviders() |
| 166 | + .stream() |
| 167 | + .filter((provider) -> provider.getClass() == EnvironmentConfigurationValueProvider.class) |
| 168 | + .toList() |
| 169 | + .forEach(liquibaseConfiguration::unregisterProvider); |
| 170 | + |
| 171 | + liquibaseConfiguration.registerProvider(new EnvironmentConfigurationValueProvider(environment)); |
| 172 | + } |
| 173 | + |
158 | 174 | private DataSource getMigrationDataSource(@Nullable DataSource liquibaseDataSource,
|
159 | 175 | @Nullable DataSource dataSource, LiquibaseConnectionDetails connectionDetails) {
|
160 | 176 | if (liquibaseDataSource != null) {
|
@@ -190,24 +206,6 @@ private void applyConnectionDetails(LiquibaseConnectionDetails connectionDetails
|
190 | 206 |
|
191 | 207 | }
|
192 | 208 |
|
193 |
| - @Bean |
194 |
| - static BeanFactoryPostProcessor liquibaseConfigurationValueProviderRegistrar(Environment environment) { |
195 |
| - |
196 |
| - return (beanFactory) -> { |
197 |
| - var liquibaseConfiguration = liquibase.Scope.getCurrentScope() |
198 |
| - .getSingleton(liquibase.configuration.LiquibaseConfiguration.class); |
199 |
| - |
200 |
| - // Remove any previously registered instance of our provider class |
201 |
| - liquibaseConfiguration.getProviders() |
202 |
| - .stream() |
203 |
| - .filter((provider) -> provider.getClass() == EnvironmentConfigurationValueProvider.class) |
204 |
| - .toList() |
205 |
| - .forEach(liquibaseConfiguration::unregisterProvider); |
206 |
| - |
207 |
| - liquibaseConfiguration.registerProvider(new EnvironmentConfigurationValueProvider(environment)); |
208 |
| - }; |
209 |
| - } |
210 |
| - |
211 | 209 | @ConditionalOnClass(Customizer.class)
|
212 | 210 | @Configuration(proxyBeanMethods = false)
|
213 | 211 | static class CustomizerConfiguration {
|
|
0 commit comments