|
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