2015-03-02 8 views
10

Volevo solo verificare se qualcuno avesse un modo più veloce per impostare TaskExecutor per Spring MVC entro l'avvio di primavera (utilizzando la configurazione automatica). Questo è quello che ho finora:Spring Boot - Qualsiasi scelta rapida per l'impostazione di TaskExecutor?

@Bean 
protected ThreadPoolTaskExecutor mvcTaskExecutor() { 
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
    executor.setThreadNamePrefix("my-mvc-task-executor-"); 
    executor.setCorePoolSize(5); 
    executor.setMaxPoolSize(200); 
    return executor; 
} 

@Bean 
protected WebMvcConfigurer webMvcConfigurer() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void configureAsyncSupport(AsyncSupportConfigurer configurer) { 
      configurer.setTaskExecutor(mvcTaskExecutor()); 
     } 
    }; 
} 

Qualcuno ha un modo migliore/più veloce per fare questo?

-Joshua

+1

Per "migliore/più veloce" intendi con meno linee di codice? Quello che hai ora non è male. Se non altro, potresti voler rendere i due interi magici lì configurabili iniettandoli come "@ Valore". – Thilo

+1

Sì, sto cercando meno codice (sempre). Sono d'accordo con il tuo punto sui numeri magici però. Pensavo che il codice aggiuntivo avrebbe distratto. – joshuawhite929

+0

grazie! la tua domanda era in realtà una buona risposta per me :) – harshadura

risposta

1

Un modo per raggiungere questo obiettivo è quello di utilizzare la classe ConcurrentTaskExceptor di primavera. Questa classe funge da adattatore tra Spring's TaskExecutor e JDK's Executor.

@Bean 
protected WebMvcConfigurer webMvcConfigurer() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void configureAsyncSupport(AsyncSupportConfigurer configurer) { 
      configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(5))); 
     } 
    }; 
} 

Un problema di cui sopra è che non è possibile specificare la dimensione massima del pool. Ma puoi sempre creare un nuovo metodo di fabbrica, createThreadPool(int core, int max) per ottenere pool di thread configurabili.