java - @Async 不适用于返回类型为 void 的方法
问题描述
我想使用@Async
注释创建一个异步写入数据库的方法。
我用注释标记了课程@EnableAsync
:
@EnableAsync
public class FacialRecognitionAsyncImpl {
@Async
public void populateDataInPushQueue(int mediaId, int studentId) {
//myCode
}
}
在调用该populateDataInPushQueue
方法时,写入操作应该在另一个线程中执行,并且流程应该从我正在调用此方法的类继续。但这并没有发生,程序执行正在等待此方法完成。
解决方案
@Async
注释几乎没有限制 - 检查是否遵守这些限制:
- 它必须仅应用于
public
方法 - 它不能从定义的同一类中调用
- 返回类型必须是
void
或者Future
以下内容可在以下文档中找到@EnableAsync
:
请注意,代理模式只允许通过代理拦截呼叫;同一类中的本地调用不能以这种方式被拦截。
另一个事实是带有注释的类也@EnableAsync
必须是 a @Configuration
。因此从一个空类开始:
@EnableAsync
@Configuration
public class AsyncConfiguration { }
推荐阅读
- c - 如何将单行按空格分割成两种不同的类型
- python - Python类在调用函数时没有属性
- javascript - 向 WP 主题添加新的导航菜单
- c# - 是否有关于使用 .Net 标准的 MvvmCross.Forms 和本地化的教程
- netlogo - 在 Netlogo 中画一个半圆
- c# - 如何访问下游对象中的 Logger 对象?
- python - How to get percentage from sum of selected rows using Pandas?
- c# - Get a random list of integer array in C#
- php - ON DUPLICATE KEY query - pulling out the primary key of a table
- javascript - issues with parent page postback after closing child modal form