使用quartz框架
可以利用quartz实现程序中动态添加定时任务,步骤为创建Job接口的实现类,之后创建JobDetail指定Job实现类,配合创建的Trigger使用Schedule启动即可,可以参考quartz教程
对xxl-job的admin模块进行改造实现
xxl-job本身支持通过页面管理端进行任务的添加,本质上是调用的后台接口实现。在2.3.0版本的xxl-job的admin模块的com.xxl.job.admin.controller.JobInfoController类中为对任务进行增删改查的入口,业务类由XxlJobService实现,可以参考。需要注意的是amdin管理模块默认对所有请求有权限校验,不能随意访问,需要使用注解@PermissionLimit加在controller方法上来控制是否开启权限。
/**
* 自定义添加定时任务接口,不拦截请求
* @param jobInfo
* @return
*/
@PostMapping("/myadd")
@ResponseBody
@PermissionLimit(limit = false)
public ReturnT<String> myAdd(@RequestBody XxlJobInfo jobInfo) {
return xxlJobService.add(jobInfo);
}
上面为自定义的添加任务接口,下面给出请求报文样例:
{
"jobGroup":3,
"jobDesc":"接口添加任务",
"author":"guomz",
"scheduleType":"CRON",
"scheduleConf":"0/2 * * * * ?",
"executorHandler":"demoJobHandler",
"executorParam":"aaa,ccc",
"glueType":"BEAN",
"executorRouteStrategy":"FIRST",
"misfireStrategy":"DO_NOTHING",
"executorBlockStrategy":"SERIAL_EXECUTION"
}
其中jobGroup为执行器在xxl-job数据库xxl_job_group的主键id,参数与页面传递的参数基本一致,注意必填参数的值,例如后三个。之后再参照添加任务的方法修改触发任务的接口,调用执行即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。