Spring Boot, @Async
anotasyonu ile arka planda asenkron görevler çalıştırmayı kolaylaştırır. Bu, ana threadi engellemeden görevleri çalıştırarak uygulamanın performansını artırmak ve yanıt süresini optimize etmek için kullanılır.
🌟 Neden Spring Boot'ta @Async Kullanmalıyız?
- Engellenmeyen Çalıştırma: Görevleri ana thread'i bekletmeden çalıştırır.
- Geliştirilmiş Performans: Bağımsız görevleri paralel olarak yürütür.
- Daha İyi Ölçeklenebilirlik: Diğer süreçler için kaynakları serbest bırakır.
- Kolay Entegrasyon: Spring Boot’un bağımlılık enjeksiyonu ve yaşam döngüsü yönetimiyle sorunsuz çalışır.
🌟 Önkoşullar
Şu gereksinimlere sahip olduğunuzdan emin olun:
- ☕ Java Development Kit (JDK) 17+
- 📦 Maven veya Gradle kurulu
- 🔤 Bir Java IDE (IntelliJ IDEA, Eclipse vb.)
🛠️ Adım 1: Bağımlılıkları Ekleyin
Asenkron işlemleri 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'
📋 Adım 2: Uygulamanızda Asenkron İşlemi Etkinleştirin
Ana uygulama sınıfınıza @EnableAsync
anotasyonunu ekleyerek asenkron çalışmayı etkinleştirin.
package com.example.async; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @EnableAsync public class AsyncApplication { public static void main(String[] args) { SpringApplication.run(AsyncApplication.class, args); } }
package com.example.async import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.scheduling.annotation.EnableAsync @SpringBootApplication @EnableAsync class AsyncApplication fun main(args: Array<String>) { runApplication<AsyncApplication>(*args) }
📖 Adım 3: Asenkron Bir Görev Tanımlayın
@Async
anotasyonunu kullanarak bir asenkron metot tanımlayın.
package com.example.async; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.time.LocalTime; @Service public class AsyncTask { @Async public void runTask() { System.out.println("Asenkron görev çalıştırıldı: " + LocalTime.now()); } }
package com.example.async import org.springframework.scheduling.annotation.Async import org.springframework.stereotype.Service import java.time.LocalTime @Service class AsyncTask { @Async fun runTask() { println("Asenkron görev çalıştırıldı: ${LocalTime.now()}") } }
🔄 Adım 4: Asenkron Görevleri Tetiklemek için Bir Controller Oluşturun
Bir REST controller oluşturarak asenkron işlemi tetikleyin.
package com.example.async; import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; @RestController @RequestMapping("/async") @RequiredArgsConstructor public class AsyncController { private final AsyncTask asyncTask; @GetMapping("/run") public String triggerAsyncTask() { asyncTask.runTask(); return "Asenkron görev tetiklendi!"; } }
package com.example.async import org.springframework.web.bind.annotation.* @RestController @RequestMapping("/async") class AsyncController( private val asyncTask: AsyncTask ) { @GetMapping("/run") fun triggerAsyncTask(): String { asyncTask.runTask() return "Asenkron görev tetiklendi!" } }
▶️ Uygulamayı Çalıştırma
Spring Boot uygulamasını çalıştırın:
./mvnw spring-boot:run
Veya Gradle kullanarak:
gradle bootRun
🧪 Asenkron Görevi Test Etme
Asenkron Görevi Tetikleme:
curl -X GET http://localhost:8080/async/run
Beklenen Konsol Çıktısı:
Asenkron görev çalıştırıldı: 12:00:01
Spring Boot’un @Async
anotasyonu, arka planda asenkron görevleri yürütmeyi kolaylaştırır. Uzun süreli görevleri çalıştırmanız, yanıt sürelerini iyileştirmeniz veya kaynak kullanımını optimize etmeniz gerektiğinde Spring’in asenkron desteği güçlü ve esnek bir çözüm sunar.