定时任务二开说明
定时任务二开说明
首页需要明确在项目中我们使用的定时任务框架是quartz框架。
quartz框架自身的表是数据库中QRTZ开头的11张表。
我们自定义了eb_schedule_job
,eb_schedule_job_log
两张来表便于我们的定时任务管理和定时任务日志管理
下面我们来看看怎么加入一个新的定时任务,例如增加一个生日有礼定时任务
增加定时任务
1.创建定时任务的TASK
为了目录的统一下,创建在admin项目的task目录下
2.编码定时任务TASK类
这里只是一个示例,对应的service实现就不展示了
@Component("BirthdayPresentTask") // 表明定时任务标识
public class BirthdayPresentTask {
//日志
private static final Logger logger = LoggerFactory.getLogger(CouponOverdueTask.class);
@Autowired
private MarketingActivityService marketingActivityService;
/**
* 每天凌晨1点执行
* 具体的任务实现
*/
public void sendBirthdayPresent() {
// cron : 0 0 1 * * ?
logger.info("---BirthdayPresentTask sendBirthdayPresent------produce Data with fixed rate task: Execution Time - {}", DateUtil.date());
try {
marketingActivityService.sendBirthdayPresent();
} catch (Exception e) {
e.printStackTrace();
logger.error("BirthdayPresentTask.sendBirthdayPresent" + " | msg : " + e.getMessage());
}
}
}
3.在管理端添加定时任务
创建好的定时任务处于暂定状态,我们这里可以先点击触发一次,查看日志定时任务有无执行,如果确认定时任务执行无问题,将定时任务状态切换到正常开启。
4.其他问题说明
a.为什么在文档中让大家在平台端添加定时任务?
首先,只有这样添加的定时任务才能在项目不重启的情况下加入项目正常运行,
其次,这种添加方式不需要手动操作数据库,一方面保证了数据库安全,另一方面也避免了对于数据表的少操作、漏操作。
b.如果我就是不想在平台端添加定时任务怎么办?或者是有的版本页面没有定时任务管理
如同此文档前两步编写好代码,然后在eb_schedule_job中添加一条数据,
bean_name-类名,method_name-方法名,cron_expression-cron表达式,status-这里一定是0。
然后重启admin-api项目,因为只有在项目启动时,才会把所有的定时任务加载入quartz中。