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,10 @@ 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 ) Optional <AsyncTaskExecutor > applicationTaskExecutor ) {
131+ @ Nullable AsyncTaskExecutor bootstrapExecutor = determineBootstrapExecutor (taskExecutors ,
132+ applicationTaskExecutor .orElse (null ));
129133 EntityManagerFactoryBuilder builder = new EntityManagerFactoryBuilder (jpaVendorAdapter ,
130134 this ::buildJpaProperties , persistenceUnitManager .getIfAvailable (), null , bootstrapExecutor );
131135 if (this .properties .getBootstrap () == Bootstrap .ASYNC ) {
@@ -136,9 +140,10 @@ public EntityManagerFactoryBuilder entityManagerFactoryBuilder(JpaVendorAdapter
136140 return builder ;
137141 }
138142
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 );
143+ private @ Nullable AsyncTaskExecutor determineBootstrapExecutor (ObjectProvider <AsyncTaskExecutor > taskExecutors ,
144+ @ Nullable AsyncTaskExecutor applicationTaskExecutor ) {
145+ @ Nullable AsyncTaskExecutor asyncTaskExecutor = taskExecutors .getIfUnique ();
146+ return (asyncTaskExecutor != null ) ? asyncTaskExecutor : applicationTaskExecutor ;
142147 }
143148
144149 private Map <String , ?> buildJpaProperties (DataSource dataSource ) {
0 commit comments