This Spring Boot app runs an async task that waits 2 seconds. Meanwhile, the main thread prints messages without waiting. Finally, it prints the async task result.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
@SpringBootApplication
@EnableAsync
public class AsyncExampleApplication {
public static void main(String[] args) throws Exception {
var context = SpringApplication.run(AsyncExampleApplication.class, args);
var service = context.getBean(MyService.class);
System.out.println("Calling async method...");
CompletableFuture<String> future = service.asyncTask();
System.out.println("Doing other work while waiting...");
// Wait for async result
System.out.println("Result: " + future.get());
}
}
@Service
class MyService {
@Async
public CompletableFuture<String> asyncTask() throws InterruptedException {
Thread.sleep(2000); // simulate long task
return CompletableFuture.completedFuture("Task completed");
}
}