若依创建定时任务时遇到的一些问题
写之前参考了其他大佬的方法,说class要加什么@Component(“bean名称”)啥的比较麻烦,自己捋了一下,整理成文
首先是👆官方教程链接,接下来我想把自己写的实现类中的某个方法也加进去

👆一个若依代码生成的实现类

👆实现类中一个普通的方法,里面需要调用mapper查询数据库表。可以看到我没有直接用系统生成的qcNewRiverBoatmapper
若依定时任务调用有两种方式:
- Spring Bean 方式(目标字符串不包含多个.)- 通过 SpringUtils.getBean() 获取
- 普通类方式(目标字符串包含多个.)- 通过反射创建新实例
当定时任务配置的目标方法使用的是类全路径名(如 com.ruoyi.system.service.impl.QcNewRiverBoatServiceImpl.updateRiverBoatListStatusOnline)时,会通过 Class.forName().newInstance() 创建新实例,导致 @Autowired 注入的 qcNewRiverBoatMapper 为 null。
需要修改 Service 实现类,使用 Spring 上下文工具类手动获取 Mapper,也就是👆第一张图的getMapper()
有个地方需要加白名单,这里官方教程没有说,但是是要加上的,复制一下内容使用全局搜索搜出这个变量,加上实现类的路径,如下图所示:
public static final String[] JOB_WHITELIST_STR = {"com.ruoyi.quartz.task",

这里是我配置的定时任务,每天零点执行。这里把cron表达式也复制在这里
0 0 0 ?
