1919import java .util .HashMap ;
2020import java .util .List ;
2121import java .util .Map ;
22+ import java .util .Optional ;
2223
2324import javax .sql .DataSource ;
2425
2930
3031import org .springframework .beans .factory .BeanFactory ;
3132import org .springframework .beans .factory .ObjectProvider ;
33+ import org .springframework .beans .factory .annotation .Qualifier ;
3234import org .springframework .boot .autoconfigure .AutoConfigurationPackages ;
3335import org .springframework .boot .autoconfigure .EnableAutoConfiguration ;
3436import org .springframework .boot .autoconfigure .condition .ConditionalOnBooleanProperty ;
@@ -124,8 +126,9 @@ public JpaVendorAdapter jpaVendorAdapter() {
124126 public EntityManagerFactoryBuilder entityManagerFactoryBuilder (JpaVendorAdapter jpaVendorAdapter ,
125127 ObjectProvider <PersistenceUnitManager > persistenceUnitManager ,
126128 ObjectProvider <EntityManagerFactoryBuilderCustomizer > customizers ,
127- Map <String , AsyncTaskExecutor > taskExecutors ) {
128- @ Nullable AsyncTaskExecutor bootstrapExecutor = determineBootstrapExecutor (taskExecutors );
129+ ObjectProvider <AsyncTaskExecutor > taskExecutors ,
130+ @ Qualifier (TaskExecutionAutoConfiguration .APPLICATION_TASK_EXECUTOR_BEAN_NAME ) ObjectProvider <AsyncTaskExecutor > applicationTaskExecutor ) {
131+ @ Nullable AsyncTaskExecutor bootstrapExecutor = determineBootstrapExecutor (taskExecutors , applicationTaskExecutor );
129132 EntityManagerFactoryBuilder builder = new EntityManagerFactoryBuilder (jpaVendorAdapter ,
130133 this ::buildJpaProperties , persistenceUnitManager .getIfAvailable (), null , bootstrapExecutor );
131134 if (this .properties .getBootstrap () == Bootstrap .ASYNC ) {
@@ -136,9 +139,10 @@ public EntityManagerFactoryBuilder entityManagerFactoryBuilder(JpaVendorAdapter
136139 return builder ;
137140 }
138141
139- private @ Nullable AsyncTaskExecutor determineBootstrapExecutor (Map <String , AsyncTaskExecutor > taskExecutors ) {
140- return (taskExecutors .size () == 1 ) ? taskExecutors .values ().iterator ().next ()
141- : taskExecutors .get (TaskExecutionAutoConfiguration .APPLICATION_TASK_EXECUTOR_BEAN_NAME );
142+ private @ Nullable AsyncTaskExecutor determineBootstrapExecutor (ObjectProvider <AsyncTaskExecutor > taskExecutors ,
143+ ObjectProvider <AsyncTaskExecutor > applicationTaskExecutor ) {
144+ @ Nullable AsyncTaskExecutor asyncTaskExecutor = taskExecutors .getIfUnique ();
145+ return (asyncTaskExecutor != null ) ? asyncTaskExecutor : applicationTaskExecutor .getIfAvailable ();
142146 }
143147
144148 private Map <String , ?> buildJpaProperties (DataSource dataSource ) {
0 commit comments