spingboot @Async demo
时间: 2023-06-30 12:20:15 浏览: 90
springboot中@Async默认线程池导致OOM问题
5星 · 资源好评率100%
好的,下面给出一个Spring Boot中使用@Async注解的示例。
首先,需要在启动类中添加@EnableAsync注解开启异步支持:
```java
@SpringBootApplication
@EnableAsync
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
然后,在Service层中定义一个异步方法:
```java
@Service
public class AsyncService {
@Async
public CompletableFuture<String> asyncMethod() {
// 模拟异步方法执行
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return CompletableFuture.completedFuture("Async method completed.");
}
}
```
在上述代码中,使用@Async注解修饰了asyncMethod()方法,该方法会在另外一个线程中异步执行,模拟了一个耗时的异步操作,并通过CompletableFuture类返回异步操作的结果。
最后,在Controller层中调用异步方法:
```java
@RestController
public class AsyncController {
@Autowired
private AsyncService asyncService;
@GetMapping("/async")
public CompletableFuture<String> asyncCall() {
return asyncService.asyncMethod();
}
}
```
在上述代码中,使用@Autowired注解将AsyncService注入到Controller中,并在asyncCall()方法中调用异步方法。
当访问http://localhost:8080/async时,异步方法会在另外一个线程中执行,Controller不会阻塞等待异步方法的执行结果,而是立即返回一个CompletableFuture对象,通过这个对象可以获取异步方法的执行结果。
需要注意的是,使用@Async注解的方法必须定义在另外一个类中,而不能定义在自己所在的类中,否则异步调用不会生效。
阅读全文