Spring Boot, @Scheduled anotasyonu ile arka planda çalışan görevleri kolayca planlamanızı sağlar. Bu yöntem, periyodik görevleri, otomasyon süreçlerini ve toplu işlemleri manuel müdahaleye gerek kalmadan yürütmek için idealdir.
Bu bölümde Neden Spring Boot @Scheduled Kullanmalıyız? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Şunlara sahip olduğunuzdan emin olun:
Cron desteğini etkinleştirmek için spring-boot-starter-web bağımlılığını pom.xml veya build.gradle dosyanıza ekleyin.
Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-web'
Neden
spring-boot-starter-web? >@Scheduledanotasyonu çalışırken Spring Context gerektirir.spring-boot-starter-webeklenerek uygulama yaşam döngüsünün doğru şekilde yönetilmesi sağlanır.
Cron desteğini etkinleştirmek için ana uygulama sınıfınıza @EnableScheduling anotasyonunu ekleyin.
@Scheduled kullanarak zamanlanmış bir görev oluşturun.
Spring Boot uygulamasını çalıştırın:
./mvnw spring-boot:run
Veya Gradle kullanarak:
gradle bootRun
Planlanmış görev her 5 saniyede bir çalıştırılacaktır.
Bu bölümde Planlanmış Görevi Test Etme konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Kendi log çıktınızı bu örnekle karşılaştırarak davranışın doğru çalıştığını hızlıca teyit edin.
Planlanmış görev çalıştırıldı: 12:00:01 Planlanmış görev çalıştırıldı: 12:00:06 Planlanmış görev çalıştırıldı: 12:00:11
Artık Spring Boot Planlanmış Görevler için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.
package com.example.scheduled; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class ScheduledApplication { public static void main(String[] args) { SpringApplication.run(ScheduledApplication.class, args); } }
package com.example.scheduled import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.scheduling.annotation.EnableScheduling @SpringBootApplication @EnableScheduling class ScheduledApplication fun main(args: Array<String>) { runApplication<ScheduledApplication>(*args) }
package com.example.scheduled; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.time.LocalTime; @Service public class ScheduledTask { @Scheduled(fixedRate = 5000) public void runTask() { System.out.println("Planlanmış görev çalıştırıldı: " + LocalTime.now()); } }
package com.example.scheduled import org.springframework.scheduling.annotation.Scheduled import org.springframework.stereotype.Service import java.time.LocalTime @Service class ScheduledTask { @Scheduled(fixedRate = 5000) fun runTask() { println("Planlanmış görev çalıştırıldı: ${LocalTime.now()}") } }