2015-03-02 15 views
10

Po prostu chciałem sprawdzić, czy ktoś miał szybszy sposób ustawić TaskExecutor dla Spring MVC w czasie rozruchu wiosennego (przy użyciu automatycznej konfiguracji). Oto, co mam do tej pory:Spring Boot - Jakieś skróty do ustawiania 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()); 
     } 
    }; 
} 

Czy ktoś ma lepszy/szybszy sposób to zrobić?

-Joshua

+1

Przez "lepsze/szybsze" masz na myśli mniej linii kodu? To, co teraz masz, nie jest złe. Jeśli cokolwiek, możesz chcieć ustawić dwie magiczne liczby całkowite tam konfigurowalne, wstrzykując je jako '@ Wartość'. – Thilo

+1

Tak, szukam mniej kodu (zawsze). Zgadzam się z twoim punktem dotyczącym magicznych liczb. Myślałem, że dodatkowy kod będzie rozpraszał uwagę. – joshuawhite929

+0

dzięki! Twoje pytanie było dla mnie dobrą odpowiedzią :) – harshadura

Odpowiedz

1

Jednym ze sposobów osiągnięcia tego celu jest użyć klasy ConcurrentTaskExceptor Wiosny. Ta klasa działa jako adapter między TaskExecutor Spring a Executorem JDK.

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

Jednym z powyższych problemów jest to, że nie można określić maksymalnego rozmiaru basenu. Ale zawsze możesz stworzyć nową metodę fabryczną, createThreadPool(int core, int max), aby uzyskać konfigurowalne pule wątków.