Spring中的异步方法@Async失效的原因详解
更新时间:2024年01月13日 09:10:24 作者:java架构师-太阳
这篇文章主要介绍了Spring中的异步方法@Async失效的原因详解,@Async属于异步注解,@Async放在方法上标识该方法为异步方法,异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,需要的朋友可以参考下
Spring中的异步方法@Async失效的原因
1.没有在配置类中开启@EnableAsync注解,导致异步方法失效。
@Configuration
@EnableAsync // 开启异步支持
public class AppConfig {
// ...
}
2.异步方法必须要被其它类中的方法调用,如果在同一个类中调用,异步方法仍然是同步执行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
public void callAsyncMethod() {
asyncMethod(); // 异步方法不会被异步执行
}
}
@Service
public class CallerService {
@Autowired
private DemoService demoService;
public void callAsyncMethod() {
demoService.asyncMethod(); // 异步方法会被异步执行
}
}
3.异步方法必须要在public方法中被调用,如果被同类中的private方法调用,异步方法仍然是同步执行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
public void callAsyncMethod() {
privateMethod(); // 异步方法不会被异步执行
}
private void privateMethod() {
asyncMethod(); // 异步方法不会被异步执行
}
}
4.异步方法必须是非静态方法,如果是静态方法,异步方法仍然是同步执行的。
@Service
public class DemoService {
@Async
public static void asyncMethod() {
// ...
}
public void callAsyncMethod() {
asyncMethod(); // 异步方法不会被异步执行
}
}
5.异步方法必须要有返回值,如果没有返回值,异步方法仍然是同步执行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
@Async
public Future<String> asyncMethodWithResult() {
// ...
return new AsyncResult<>("result");
}
}
@Service
public class CallerService {
@Autowired
private DemoService demoService;
public void callAsyncMethod() {
demoService.asyncMethod(); // 异步方法不会被异步执行
Future<String> future = demoService.asyncMethodWithResult(); // 异步方法会被异步执行
}
}
到此这篇关于Spring中的异步方法@Async失效的原因详解的文章就介绍到这了,更多相关Spring的@Async失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springcloud gateway如何实现路由和负载均衡
这篇文章主要介绍了springcloud gateway如何实现路由和负载均衡的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
Java Swing JToggleButton开关按钮的实现
这篇文章主要介绍了Java Swing JToggleButton开关按钮的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12


最新评论