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
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@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
taskScheduler.scheduleWithFixedDelay(() -> ..., 1000);