|
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