Меня также порадовала эта функция, и я был очень разочарован, обнаружив, что невозможно автоматически связывать классы, которые в некотором роде зависят от уровня сохраняемости. Но решение, описанное в Flyway Spring Boot Autowired Bean с зависимостью JPA , все еще работает:
Первое расширение FlywayConfiguration
:
@Configuration
@ComponentScan
@ConditionalOnProperty(prefix = "spring.flyway", name = "enabled", matchIfMissing = true)
class DatabaseMigrationConfiguration extends FlywayConfiguration {
@Override
public Flyway flyway(FlywayProperties properties, DataSourceProperties dataSourceProperties,
ResourceLoader resourceLoader, ObjectProvider<DataSource> dataSource,
ObjectProvider<DataSource> flywayDataSource,
ObjectProvider<FlywayConfigurationCustomizer> fluentConfigurationCustomizers,
ObjectProvider<JavaMigration> javaMigrations,
ObjectProvider<Callback> callbacks) {
return super.flyway(properties, dataSourceProperties, resourceLoader, dataSource, flywayDataSource, fluentConfigurationCustomizers,
javaMigrations, callbacks);
}
@Primary
@Bean(name = "flywayInitializer")
@DependsOn({ "springUtility" })
@ConditionalOnProperty(prefix = "spring.flyway", name = "enabled", matchIfMissing = true)
public FlywayMigrationInitializer flywayInitializer(Flyway flyway,
ObjectProvider<FlywayMigrationStrategy> migrationStrategy) {
return super.flywayInitializer(flyway, migrationStrategy);
}
Во-вторых, создайте этот класс, чтобы получитьBean-компонент из контекста приложения:
@Component
public class SpringUtility implements ApplicationContextAware {
@Autowired
private static ApplicationContext applicationContext;
public void setApplicationContext(final ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
/*
Get a class bean from the application context
*/
static <T> T getBean(final Class<T> clazz) {
return applicationContext.getBean(clazz);
}
Теперь вы можете использовать этот класс в своем классе миграции Java (extends BaseJavaMigration
), чтобы получить любой Bean-компонент, который вам нужен.