Skip to content

Commit 52311ff

Browse files
committed
Depend on FlywayMigrationInitializer beans by type not name
Previously, a custom FlywayMigrationInitializer bean named anything other than flywayInitializer could result in a NoSucBeanDefinitionException as the dependencies set up for JPA and JDBC components used the bean name flywayInitializer. This commit updates the configuration of the dependencies to depend on FlywayMigrationInitializer beans by type rather than name. Fixes gh-18105
1 parent f313bf2 commit 52311ff

File tree

2 files changed

+67
-6
lines changed

2 files changed

+67
-6
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ public FlywayMigrationInitializer flywayInitializer(Flyway flyway) {
265265

266266
/**
267267
* Additional configuration to ensure that {@link EntityManagerFactory} beans
268-
* depend on the {@code flywayInitializer} bean.
268+
* depend on any {@link FlywayMigrationInitializer} beans.
269269
*/
270270
@Configuration
271271
@ConditionalOnClass(LocalContainerEntityManagerFactoryBean.class)
@@ -274,14 +274,14 @@ protected static class FlywayInitializerJpaDependencyConfiguration
274274
extends EntityManagerFactoryDependsOnPostProcessor {
275275

276276
public FlywayInitializerJpaDependencyConfiguration() {
277-
super("flywayInitializer");
277+
super(FlywayMigrationInitializer.class);
278278
}
279279

280280
}
281281

282282
/**
283283
* Additional configuration to ensure that {@link JdbcOperations} beans depend on
284-
* the {@code flywayInitializer} bean.
284+
* any {@link FlywayMigrationInitializer} beans.
285285
*/
286286
@Configuration
287287
@ConditionalOnClass(JdbcOperations.class)
@@ -290,14 +290,14 @@ protected static class FlywayInitializerJdbcOperationsDependencyConfiguration
290290
extends JdbcOperationsDependsOnPostProcessor {
291291

292292
public FlywayInitializerJdbcOperationsDependencyConfiguration() {
293-
super("flywayInitializer");
293+
super(FlywayMigrationInitializer.class);
294294
}
295295

296296
}
297297

298298
/**
299299
* Additional configuration to ensure that {@link NamedParameterJdbcOperations}
300-
* beans depend on the {@code flywayInitializer} bean.
300+
* beans depend on any {@link FlywayMigrationInitializer} beans.
301301
*/
302302
@Configuration
303303
@ConditionalOnClass(NamedParameterJdbcOperations.class)
@@ -306,7 +306,7 @@ protected static class FlywayInitializerNamedParameterJdbcOperationsDependencyCo
306306
extends NamedParameterJdbcOperationsDependsOnPostProcessor {
307307

308308
public FlywayInitializerNamedParameterJdbcOperationsDependencyConfiguration() {
309-
super("flywayInitializer");
309+
super(FlywayMigrationInitializer.class);
310310
}
311311

312312
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,22 @@ public void customFlywayMigrationInitializer() {
266266
});
267267
}
268268

269+
@Test
270+
public void customFlywayMigrationInitializerWithJpa() {
271+
this.contextRunner
272+
.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
273+
CustomFlywayMigrationInitializerWithJpaConfiguration.class)
274+
.run((context) -> assertThat(context).hasNotFailed());
275+
}
276+
277+
@Test
278+
public void customFlywayMigrationInitializerWithJdbc() {
279+
this.contextRunner
280+
.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
281+
CustomFlywayMigrationInitializerWithJdbcConfiguration.class)
282+
.run((context) -> assertThat(context).hasNotFailed());
283+
}
284+
269285
@Test
270286
public void customFlywayWithJpa() {
271287
this.contextRunner
@@ -406,6 +422,25 @@ public FlywayMigrationInitializer flywayMigrationInitializer(Flyway flyway) {
406422

407423
}
408424

425+
@Configuration
426+
protected static class CustomFlywayMigrationInitializerWithJpaConfiguration {
427+
428+
@Bean
429+
public FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) {
430+
return new FlywayMigrationInitializer(flyway);
431+
}
432+
433+
@Bean
434+
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource) {
435+
Map<String, Object> properties = new HashMap<>();
436+
properties.put("configured", "manually");
437+
properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE);
438+
return new EntityManagerFactoryBuilder(new HibernateJpaVendorAdapter(), properties, null)
439+
.dataSource(dataSource).build();
440+
}
441+
442+
}
443+
409444
@Configuration
410445
protected static class CustomFlywayWithJpaConfiguration {
411446

@@ -457,6 +492,32 @@ public NamedParameterJdbcOperations namedParameterJdbcOperations() {
457492

458493
}
459494

495+
@Configuration
496+
protected static class CustomFlywayMigrationInitializerWithJdbcConfiguration {
497+
498+
private final DataSource dataSource;
499+
500+
protected CustomFlywayMigrationInitializerWithJdbcConfiguration(DataSource dataSource) {
501+
this.dataSource = dataSource;
502+
}
503+
504+
@Bean
505+
public FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) {
506+
return new FlywayMigrationInitializer(flyway);
507+
}
508+
509+
@Bean
510+
public JdbcOperations jdbcOperations() {
511+
return new JdbcTemplate(this.dataSource);
512+
}
513+
514+
@Bean
515+
public NamedParameterJdbcOperations namedParameterJdbcOperations() {
516+
return new NamedParameterJdbcTemplate(this.dataSource);
517+
}
518+
519+
}
520+
460521
@Component
461522
protected static class MockFlywayMigrationStrategy implements FlywayMigrationStrategy {
462523

0 commit comments

Comments
 (0)