diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java index d08f8219558..c57f37fd61a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -265,7 +265,7 @@ public class FlywayAutoConfiguration { /** * Additional configuration to ensure that {@link EntityManagerFactory} beans - * depend on the {@code flywayInitializer} bean. + * depend on any {@link FlywayMigrationInitializer} beans. */ @Configuration @ConditionalOnClass(LocalContainerEntityManagerFactoryBean.class) @@ -274,14 +274,14 @@ public class FlywayAutoConfiguration { extends EntityManagerFactoryDependsOnPostProcessor { public FlywayInitializerJpaDependencyConfiguration() { - super("flywayInitializer"); + super(FlywayMigrationInitializer.class); } } /** * Additional configuration to ensure that {@link JdbcOperations} beans depend on - * the {@code flywayInitializer} bean. + * any {@link FlywayMigrationInitializer} beans. */ @Configuration @ConditionalOnClass(JdbcOperations.class) @@ -290,14 +290,14 @@ public class FlywayAutoConfiguration { extends JdbcOperationsDependsOnPostProcessor { public FlywayInitializerJdbcOperationsDependencyConfiguration() { - super("flywayInitializer"); + super(FlywayMigrationInitializer.class); } } /** * Additional configuration to ensure that {@link NamedParameterJdbcOperations} - * beans depend on the {@code flywayInitializer} bean. + * beans depend on any {@link FlywayMigrationInitializer} beans. */ @Configuration @ConditionalOnClass(NamedParameterJdbcOperations.class) @@ -306,7 +306,7 @@ public class FlywayAutoConfiguration { extends NamedParameterJdbcOperationsDependsOnPostProcessor { public FlywayInitializerNamedParameterJdbcOperationsDependencyConfiguration() { - super("flywayInitializer"); + super(FlywayMigrationInitializer.class); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index e237ed5ac2d..d2895c012f4 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -266,6 +266,22 @@ public class FlywayAutoConfigurationTests { }); } + @Test + public void customFlywayMigrationInitializerWithJpa() { + this.contextRunner + .withUserConfiguration(EmbeddedDataSourceConfiguration.class, + CustomFlywayMigrationInitializerWithJpaConfiguration.class) + .run((context) -> assertThat(context).hasNotFailed()); + } + + @Test + public void customFlywayMigrationInitializerWithJdbc() { + this.contextRunner + .withUserConfiguration(EmbeddedDataSourceConfiguration.class, + CustomFlywayMigrationInitializerWithJdbcConfiguration.class) + .run((context) -> assertThat(context).hasNotFailed()); + } + @Test public void customFlywayWithJpa() { this.contextRunner @@ -406,6 +422,25 @@ public class FlywayAutoConfigurationTests { } + @Configuration + protected static class CustomFlywayMigrationInitializerWithJpaConfiguration { + + @Bean + public FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) { + return new FlywayMigrationInitializer(flyway); + } + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource) { + Map properties = new HashMap<>(); + properties.put("configured", "manually"); + properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE); + return new EntityManagerFactoryBuilder(new HibernateJpaVendorAdapter(), properties, null) + .dataSource(dataSource).build(); + } + + } + @Configuration protected static class CustomFlywayWithJpaConfiguration { @@ -457,6 +492,32 @@ public class FlywayAutoConfigurationTests { } + @Configuration + protected static class CustomFlywayMigrationInitializerWithJdbcConfiguration { + + private final DataSource dataSource; + + protected CustomFlywayMigrationInitializerWithJdbcConfiguration(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Bean + public FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) { + return new FlywayMigrationInitializer(flyway); + } + + @Bean + public JdbcOperations jdbcOperations() { + return new JdbcTemplate(this.dataSource); + } + + @Bean + public NamedParameterJdbcOperations namedParameterJdbcOperations() { + return new NamedParameterJdbcTemplate(this.dataSource); + } + + } + @Component protected static class MockFlywayMigrationStrategy implements FlywayMigrationStrategy {