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.
Bu bölümde Neden Spring Boot'ta @Async Kullanmalıyız? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Şu gereksinimlere sahip olduğunuzdan emin olun:
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'
Ana uygulama sınıfınıza @EnableAsync anotasyonunu ekleyerek asenkron çalışmayı etkinleştirin.
@Async anotasyonunu kullanarak bir asenkron metot tanımlayın.
Bir REST controller oluşturarak asenkron işlemi tetikleyin.
Spring Boot uygulamasını çalıştırın:
./mvnw spring-boot:run
Veya Gradle kullanarak:
gradle bootRun
Bu bölümde Asenkron Görevi Test Etme konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Bu çağrı ile asenkron akışı tetikleyip görev yürütümünü loglar üzerinden takip edebilirsiniz.
curl -X GET http://localhost:8080/async/run
Kendi log çıktınızı bu örnekle karşılaştırarak davranışın doğru çalıştığını hızlıca teyit edin.
Asenkron görev çalıştırıldı: 12:00:01
Artık Spring Boot Asenkron 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.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) }
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()}") } }
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!" } }