10 Kasım 2017 Cuma

SpringScheduling TaskScheduler Arayüzü - Dynamic Task Scheduling İçin Kullanılır

Giriş
Şu satırı dahil ederiz.
import org.springframework.scheduling.TaskScheduler;
Bu arayüzü gerçekleştiren sınıflar şöyle
ConcurrentTaskScheduler, 
DefaultManagedTaskScheduler, 
TimerManagerTaskScheduler

Bu sınıf scheduleXXX() şeklinde metodlar sağlar. Temel amacı bir işin gelecekte çağrılması için teslim edilmesini sağlamak. İşi çalıştıran sınıflar genellikle bir ThreadPool kullandıkları için aynı zamanda TaskExecutor arayüzünü de gerçekleştirirler.

Tanımlama
Örnek
Şöyle yaparız.
<task:scheduler id="scheduler" pool-size="10" />
<task:executor id="executor" keep-alive="3600" pool-size="100-200"
               queue-capacity="500" rejection-policy="CALLER_RUNS" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
schedule metodu - Runnable + Date
Örnek
Şöyle yaparız
taskScheduler.schedule(
  () -> ...,
  new Date(System.currentTimeMillis() + 3000)
);
schedule metodu - Runnable + Trigger
Trigger arayüzü işin bir sonraki çalışma zamanını hesaplar.
Bu metod ScheduledFuture nesnesi döner.
Örnek
Şöyle yaparız.
scheduler.schedule(runnable, new CronTrigger("0 15 9-17 * * MON-FRI"));
Örnek
Şöyle yaparız
@Service
public class TaskSchedulingService {

  @Autowired
  private TaskScheduler taskScheduler;

  Map<String, ScheduledFuture<?>> jobsMap = new HashMap<>();

  public void scheduleATask(String jobId, Runnable runnable String cronExpression) {
    ScheduledFuture<?> scheduledTask = taskScheduler.schedule(runnable, 
      new CronTrigger(cronExpression,
TimeZone.getTimeZone(TimeZone.getDefault().getID())));

    jobsMap.put(jobId, scheduledTask);
  }

  public void removeScheduledTask(String jobId) {
    ScheduledFuture<?> scheduledTask = jobsMap.get(jobId);
    if(scheduledTask != null) {
      scheduledTask.cancel(true);
      jobsMap.put(jobId, null);
    }
  }
}
scheduleWithFixedDelay metodu
Örnek
Şöyle yaparız
taskScheduler.scheduleWithFixedDelay(() -> ..., 1000);

Hiç yorum yok:

Yorum Gönder