定时任务quartz配置
发布日期:2021-07-20 20:53:07
浏览次数:29
分类:技术文章
本文共 2980 字,大约阅读时间需要 9 分钟。
参考链接:
xml 配置:
注册trigger
......
注册task
com.star.demo.ProjectQuartzJobBean
注册自定义job
调度中心加入trigger
作业类实例:
import java.lang.reflect.Method;import org.quartz.JobExecutionException;import org.quartz.PersistJobDataAfterExecution;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.scheduling.quartz.QuartzJobBean;import org.quartz.DisallowConcurrentExecution;import org.quartz.JobExecutionContext;import common.Logger;/** 自定义的QuartzJobBean (作业类)*/@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class ProjectQuartzJobBean extends QuartzJobBean implements ApplicationContextAware{ protected final Logger logger = Logger.getLogger(getClass()); private String targetMethod; private String targetObject; private ApplicationContext context; @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { try { logger.info("开始执行 :" + targetObject); // 每个节点都打印此日志,但只有一个节点会执行 Object targetObj = context.getBean(targetObject); Method m = null; try { m = targetObj.getClass().getMethod(targetMethod, new Class[] {JobExecutionContext.class}); m.invoke(targetObj, new Object[] {context}); } catch (Exception e) { logger.error(e); } } catch (Exception e) { throw new JobExecutionException(e); } } public void setApplicationContext(ApplicationContext applicationContext) { this.context = applicationContext; } public void setTargetObject(String targetObject) { this.targetObject = targetObject; } public void setTargetMethod(String targetMethod) { this.targetMethod = targetMethod; } }
Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能。为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。
Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传给该方法——该方法中的实现部分将Spring传入的参数(容器本身)赋给该类对象的applicationContext实例变量,因此接下来可以通过该applicationContext实例变量来访问容器本身。
例如:
在CacheUtil中通过spring容器创建CacheManager实例
public class CacheUtils { private static CacheManager cacheManager = ((CacheManager) SpringContextHolder.getBean("cacheManager"));}
转载地址:https://blog.csdn.net/liao0801_123/article/details/80509404 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月03日 21时18分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
unicloud云开发---uniapp云开发云函数练习---整合百度ai图像识别SDK
2019-04-26
七夕到了!不会写代码?一样可以给女朋友建个网站
2019-04-26
大过年睡不着,聊聊云开发入门
2019-04-26
unicloud云开发---uniapp云开发(二)---云存储基础
2019-04-26
unicloud使用云函数每天定时向女朋友发送邮件推送天气
2019-04-26
unicloud云开发---uniapp云开发(三)---云数据库基础(超详细)
2019-04-26
js入门(ES6)[四]---对象
2019-04-26
腾讯位置服务---vue微信小程序SDK使用(一)---下载SDK并再次封装
2019-04-26
vue实现桌面向网页拖动文件(可显示图片/音频/视频)
2019-04-26
大前端快速入门
2019-04-26
js入门(ES6)[六]---异步编程
2019-04-26
vue+flask实现视频合成(拖拽上传)
2019-04-26
unicloud进阶uni-id入门(一)---uni-id能做什么?
2019-04-26
uni-app开发H5使用vue-router
2019-04-26
uni-app使用element ui开发H5(跨端可推荐uview ui )
2019-04-26
云开发多端用户模块实战(一)---效果展示以及课程大纲
2019-04-26
uni-app多端用户模块效果演示
2019-04-26
nodejs环境快速操作mysql数据库
2021-06-29