7 Nisan 2019 Pazar

SpringAsync TaskExecutor Arayüzü

Giriş
Açıklaması şöyle.
The Spring Framework provides abstractions for asynchronous execution and scheduling of tasks with the TaskExecutor and TaskScheduler interfaces, respectively.
TaskScheduler arayüzü yazısına göz atabilirsiniz.

Bu arayüzü gerçekleştiren bazı sınıflar şöyle.

1.SimpleAsyncTaskExecutor - yeni thread başlatır
2.SyncTaskExecutor - çağıran thread içinde çalışır
3.ConcurrentTaskExecutor - bunun yerine ThreadPoolTaskExecutor kullanılsa daha iyi
4.SimpleThreadPoolTaskExecutor - Quartz ile birlikte kullanmak içindir
5.ThreadPoolTaskExecutor - altta java.util.concurrent.ThreadPoolExecutor sınıfını kullanır
6. WorkManagerTaskExecutor - CommonJ WorkManager ile birlikte kullanmak içindir

Bu arayüz ile birlikte @EnableAsync, @Async anotasyonlarını da bakabilirsiniz.

Tanımlama
1. task:executor tanımlanır
2. task:annotation-driven executor tanımlanır ve executor bu nesneye geçilir. Böylece kodun içinde @Async anotasyonu kullanılabilir.

Örnek
Şöyle yaparız.
<task:annotation-driven executor="myExecutor" exception-handler="exceptionHandler"/>
<task:executor id="myExecutor" pool-size="7-42" queue-capacity="8"/>
Örnek
Şöyle yaparız. id alanı TaskExecutor arayüzünü gerçekleştiren bir başka bean'e atıfta bulunur
<task:executor id="taskExecutor" pool-size="650-700"
               queue-capacity="3000" rejection-policy="CALLER_RUNS"/>
Diğer bean şöyledir
<bean id="taskExecutor"
 class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="4" />
    <property name="maxPoolSize" value="4" />
    <property name="WaitForTasksToCompleteOnShutdown" value="true" />
    <property name="taskDecorator" ref="taskDecorator" />
</bean>
Örnek
Şöyle yaparız.
<task:executor id="asyncExecutor"
               pool-size="5-100"
               keep-alive="120"
               rejection-policy="CALLER_RUNS"
               queue-capacity="1000"/>

<task:executor id="otherExecutor"
               pool-size="5-20"
               keep-alive="120"
               rejection-policy="CALLER_RUNS"
               queue-capacity="100"/>
<bean id="asyncExceptionHandler" class="com.xx.xx.xx.xx.common.AsyncExceptionHandler"/>

<task:annotation-driven executor="asyncExecutor"
  exception-handler="asyncExceptionHandler"/>

Hiç yorum yok:

Yorum Gönder