这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战
除了自己实现线程外,springboot本身就提供了通过注解的方式,进行异步任务的执行。下面主要记录一下,在Springboot项目中实现异步任务,以及对异步任务进行封装监控。
1 开启异步支持
想要使用springboot的注解进行异步任务,首先要开启springboot的异步任务支持。通过集成AsyncConfigurer接口,并实现getAsyncExcutor()方法,如下所示:
1 | java复制代码package com.springboot.demo.asyncTask.conf; |
通过上面方法,就可以实现Spring boot的异步任务支持。然后只需要在想要进行异步的方法前添加@Async注解就可以了,如下所示:
1 | java复制代码package com.springboot.demo.asyncTask.service; |
2 异步任务封装监控
2.1 封装思路
提供一个异步任务的管理器,管理器可以实现异步任务的提交、保存任务信息、获取任务信息等功能。
提供一个异步任务的监控器,用于监控异步任务执行状况,并把执行信息保存到缓存中,并记录任务执行时间。
提供一个异步任务的构造器,用于构造异步方法。
提供一个异步任务的执行器,用于执行管理器提交的使用构造器构造的异步方法。
2.2 效果展示
2.2.1 启动异步任务
2.2.2 查看任务状态
2.3 编码实现
2.3.1 conf包
主要是配置springboot的线程池,开启spring boot支持异步支持
2.3.1.1 SpringTaskExcutor.java
1 | java复制代码package com.emcc.hiacloud.analytics.asynctask.conf; |
2.3.2 entity包
主要存放TaskInfo实例类用于保存任务信息,TaskStatusEnmu枚举类用来存放任务状态。
2.3.2.1 TaskInfo.java
1 | typescript复制代码package com.emcc.hiacloud.analytics.asynctask.entity; |
2.3.2.2 TaskStatusEnum.java
1 | arduino复制代码package com.emcc.hiacloud.analytics.asynctask.entity; |
2.3.3 manager包
存放任务的管理类和监控类
2.3.3.1 AsyncTaskManager.java
1 | typescript复制代码package com.emcc.hiacloud.analytics.asynctask.manager; |
2.3.3.2 AsyncTaskMonitor.java
异步任务的监控主要是利用了spring的AOP面向切面,在异步方法的执行前和执行后进行监控,判断任务状态,并记录任务信息。
1 | ini复制代码package com.emcc.hiacloud.analytics.asynctask.manager; |
2.3.4 service包
主要存放异步任务的方法构造器和执行器。
2.3.4.1 AsyncTaskConstructor
通过该接口可以构建想要实现的异步方法。只要new 一下接口实例,然后重写async()方法即可。
1 | csharp复制代码package com.emcc.hiacloud.analytics.asynctask.service; |
2.3.4.2 AsyncTaskExecutor.java 异步任务执行器
1 | java复制代码package com.emcc.hiacloud.analytics.asynctask.service; |
3 应用
实现两个接口,一个是开启一个异步任务,另一个是查看任务状态。
想要使用我们刚才分装好的异步任务,只需要将AsyncTaskManager注入到程序中。
1 | kotlin复制代码package com.emcc.hiacloud.analytics.orchestrations.controller; |
本文转载自: 掘金