Spring的异步事件,如果一个任务 需要的执行时间很长,而前端又需要返回,我们可以抛出一个异步事件,让代码再后端执行,前端返回 请等待执行结果。
1. 定义事件
import org.springframework.context.ApplicationEvent;
/**
* @author LZHH_2008
* @time 2020年4月15日下午2:08:02
*/
public class TaskEvent extends ApplicationEvent {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param source
*/
public CreateTaskEvent(Object source) {
super(source);
// TODO Auto-generated constructor stub
}
}
2. 定义监听者:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
/**
* @author LZHH_2008
* @time 2020年4月15日下午3:09:45
*/
@Component
@EnableAsync
public class TaskListener {
@Autowired
private TestService testService
@EventListener
@Async
public void uploadEvent(TaskEvent taskEvent) {
TempDTO entity = (TempDTO)notifyEvent.getSource();
testService.asynchDownload(entity);
}
}
3. 抛出异步事件
@Service(value = "taskService")
@Slf4j
public class TaskServiceImpl{
@Autowired
private ApplicationContext applicationContext;
public void createTaskInfo(TaskDTO taskDto) {
//异步绑定设备 和加载任务
TaskEvent event = new TaskEvent(taskDto);
applicationContext.publishEvent(event);
}
}
4.监听这处理逻辑
@Service(value = "taskService")
@Slf4j
public class TaskServiceImpl{
public void asynchDownload(TaskDTO taskDto) {
//需要处理的逻辑
}
}