1. SpringBoot整合quartz并不难,难在普通类实现了Job接口后等于实例化交给quartz,不受Spring管理,则service层等等其他依赖的注入将无法注入,这也是难点之一。
  2. 解决方法:
  3. @Component
  4. public class MyJobFactory extends AdaptableJobFactory {
  5. @Autowired
  6. private AutowireCapableBeanFactory capableBeanFactory;
  7. @Override
  8. protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
  9. // 调用父类的方法
  10. Object jobInstance = super.createJobInstance(bundle);
  11. // 进行注入
  12. capableBeanFactory.autowireBean(jobInstance);
  13. return jobInstance;
  14. }
  15. }

以上可以解决quartz的job无法注入的依赖而导致空指针的异常。
另外job类我们可以写一个逻辑方法将灵活的调用我们的定时任务。

  1. //第一个参数是要实现调度的类,第二个是执行的时间。第三个是传递的参数
  2. public interface QuartzService {
  3. Map<String,Object> eventSetSuccess(Class <? extends Job> klass, Date date, NoticeDTO noticeDTO) throws SchedulerException;
  4. }

以下是需要调用的类:(这样可以根据您的喜好只需要将相关的依赖和数值传进来就可以很方便的调用)

  1. public class QuartEventDemo implements Job,Serializable{ //只需建立一个类,然后将需要做的事注入进来就行
  2. private NoticeDTO noticeDTO = new NoticeDTO();
  3. @Autowired
  4. private PushMessageService pushMessageService; //注入失败?(已搞定)
  5. @Override
  6. public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
  7. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  8. JobDataMap jobDetail = jobExecutionContext.getTrigger().getJobDataMap();
  9. String openid = (String) jobDetail.get("openid");
  10. String createTime = (String) jobDetail.get("createTime");
  11. String endTime = (String) jobDetail.get("endTime");
  12. String eventContent = (String) jobDetail.get("eventContent");
  13. try {
  14. noticeDTO.setCreateTime(format.parse(createTime));
  15. noticeDTO.setEndTime(format.parse(endTime));
  16. }catch (Exception e){
  17. e.printStackTrace();
  18. }
  19. noticeDTO.setOpenid(openid);
  20. noticeDTO.setEventContent(eventContent);
  21. log.info("【传值是否成功】noticeDTO={}",noticeDTO);
  22. pushMessageService.noiteEvent(noticeDTO);
  23. }
  24. }

配置文件:

  1. server:
  2. context-path: /quartzDemo
  3. port: 80
  4. spring:
  5. datasource:
  6. driver-class-name: com.mysql.jdbc.Driver
  7. url: jdbc:mysql://127.0.0.1:3306/meetingsign?useUnicode=true&characterEncoding=utf8
  8. username: root
  9. password: ******
  10. jpa:
  11. hibernate:
  12. ddl-auto: update
  13. show-sql: true
  14. wechat:
  15. mpAppId: *******微信公众号的mpAppId
  16. mpAppSecret:********微信公众号的mpAppSecret
  17. quartzDemo:
  18. quartz:这个是填写项目的域名

作者:
链接:http://www.imooc.com/article/20532
来源:慕课网

微信公众号的SpringBoot+Quartz的定时任务Demo的更多相关文章

  1. 微信公众号 扫码支付 模式二 demo

    扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?ch ...

  2. 微信公众号H5支付遇到的那些坑

    简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 当然,最近微信支付平台也加入了纯H5支付,也就是说用户可以在微信以外的 ...

  3. Java之微信公众号开发

    这次以文本回复作为案例来讲解Java相关得微信公众号开发. 首先必须要有一个个人微信公众号 个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图: 然后进入微信公众后台,点击基本配置 ...

  4. java 扫描微信公众号二维码,关注并登录逻辑

    场景:户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: 系统生成带参数的临时二维码:参数 scene_str 自定义为唯一值(可以是uuid),临时二维码的生成方式参照官方接 ...

  5. Java对接微信公众号模板消息推送

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...

  6. 微信公众号开发之内网映射外网natapp安装(一)

    一,为什么使用natapp 1,在进行微信公众号开发时,我们需要搭建网站,并且随时都有可能修改网站内容进行调试.如果能够将内网ip映射到外网上,将大大方便我们的调试.每次发布只需eclipse运行应用 ...

  7. Python+Tornado开发微信公众号

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...

  8. Nodejs开发微信公众号中控服务

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本项目旨在为多个微信公众号 ...

  9. spring-boot-route(二十三)开发微信公众号

    在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公众号大体上可以分为服务号和订阅号,订阅号和服务号的区别如下: 服务号可以申请微信支付功能. 服务号只能由企业申请,订阅号可以有企业或个人申请. ...

随机推荐

  1. LUOGU P3380 【模板】二逼平衡树(树套树)

    传送门 解题思路 这里写的是常数巨大的线段树套\(splay\),卡了半天常才过.首先线段树每个节点挂一个\(splay\),\(splay\)中的元素即为线段树管辖的区间中的数.对于操作\(1\), ...

  2. 第七周编程总结&&实验报告五

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  3. 用倍增法构造后缀数组中的SA及RANK数组

    感觉后缀数组很难学的说= = 不过总算是啃下来了 首先 我们需要理解一下倍增法构造的原理 设原串的长度为n 对于每个子串 我们将它用'\0'补成长度为2^k的串(2^k-1<n<=2^k) ...

  4. 【Angular】No component factory found for ×××.

    报错现象: 用modal打开某个组件页面时报错 报错:No component factory found for UpdateAuthWindowComponent. Did you add it ...

  5. Mycat+Pxc的配置

    1 schema.xml配置文件 Balance属性 负载均称类型 0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上 1:全部的readHost与stand by writeH ...

  6. Windows盘符切换,Dos命令

    >>.常用Dos命令 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化 ...

  7. __attribute__ ((packed))字节对齐

    1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,g ...

  8. v-cloakd的应用场景和使用方法

    使用vue构建前端应用,加载应用后页面可能会出现闪烁: <div id="app" v-cloak> {{message}} </div> 例如上述场景,应 ...

  9. f-strings格式化输出

    python3.6后加入标准库的格式化输出新的写法 不区分大小写,f,F都可以 可以加入表达式 s1 = 'haha' s = f'python{s1.upper()}' l1 = ['小明', 18 ...

  10. Elasticsearch学习,请先看这一篇

    题记: Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识.原理从初学者认知.学习的角度,从以下9个方面进行详细梳理.欢迎讨论-- 0. 带着问题上路--ES是如 ...