SpringBoot开发案例之整合Quartz注入Service
前段时间做了一个基于SpringBoot和Quartz任务管理系统(脚手架而已),很多功能不是特别完善,由于工作原因,断断续续一直在更新中,码云上有个小伙伴提问说:Job中service自动注入报错怎么解决?正好之前做的项目中有使用到注入相关的功能,顺便也集成进去。
缘由
简单来说就是quartz中的Job是在quartz中实例化出来的,不受spring的管理,所以就导致注入不进去了。
解决
定义SpringJobFactory类:
/** * 解决spring bean注入Job的问题 */ @Component public class SpringJobFactory extends AdaptableJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 调用父类的方法 Object jobInstance = super.createJobInstance(bundle); // 进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }
quartz配置:
/** * quartz配置 * 创建者 科帮网 * 创建时间 2018年4月3日 */ @Configuration public class SchedulerConfig { @Autowired private SpringJobFactory springJobFactory; @Bean(name="SchedulerFactory") public SchedulerFactoryBean schedulerFactoryBean() throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setAutoStartup(true); factory.setStartupDelay(5);//延时5秒启动 factory.setQuartzProperties(quartzProperties()); //注意这里是重点 factory.setJobFactory(springJobFactory); return factory; } @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); propertiesFactoryBean.afterPropertiesSet(); return propertiesFactoryBean.getObject(); } /* * quartz初始化监听器 */ @Bean public QuartzInitializerListener executorListener() { return new QuartzInitializerListener(); } /* * 通过SchedulerFactoryBean获取Scheduler的实例 */ @Bean(name="Scheduler") public Scheduler scheduler() throws IOException { return schedulerFactoryBean().getScheduler(); } }
测试任务案例TestJob:
/** * 实现序列化接口、防止重启应用出现quartz Couldn't retrieve job because a required class was not found 的问题 */ public class TestJob implements Job,Serializable { private static final long serialVersionUID = 1L; @Autowired private IJobService jobService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println(jobService);//注入jobService 执行相关业务操作 System.out.println("任务执行成功"); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)
本文的概念内容来自深入浅出设计模式一书 由于我在给公司做内培, 所以最近天天写设计模式的文章.... 单体模式 Singleton 单体模式的目标就是只创建一个实例. 实际中有很多种对象我们可能只需要它们的一个实例, 例如: 线程池,缓存, 弹出的对话框, 用于保存设置的类, 用于logging的类, 硬件设备驱动对象等等. 一段对话: A: 如何创建一个对象? B: new MyObject() A: 如果想创建另一个对象, 就再次new MyObject()? B: 是的 A: 所以说我们有某个类, 我们就可以对它实例化很多次? B: 是的, 但是它必须是public的类额 A: 如果不是public的呢? B: 如果不是public的, 那么只有同一个包下的类才能对它实例化, 但是仍然可以实例化多次. A: 嗯, 很有趣, 你只你可以这样做吗? B: 没见过, 但是语法是没问题的, 存在即合理. A: 它是什么意思呢? B: 我想它不能被实例化吧, 因为它的构造函数是private的啊. A: 那么, 有没有哪个对象可以使用这个private的构造函数呢? B: 额, 我认为只有...
- 下一篇
对幕布的几条改进建议
最近我试用了一段时间的幕布,用户体验很好。 image 虽然本人用workflowy, dynalist和幕布等独立大纲应用时间不长,但是使用 Emacs + org-mode 超过 10 年,对这种列表大纲式应用并不陌生。 image 我希望幕布可以变得更顺手,获得更多用户的青睐,也帮助更多人提升学习、工作和研究的效能。所以冒昧给开发团队提出以下几点改进建议,不够成熟,谨供参考。 添加全局搜索 搜索后结果定位 导入导出 textbundle 演示采用 revealjs 下面依次说明一下: 添加全局搜索 workflowy把所有内容放在一起,一个重要原因就是可以全局搜索。这样散落的知识可以汇聚起来,非线性组合,带来灵感与启发。 image 例如上图这样的一个简单演示大纲。 如果搜索 Python ,结果是这样的: image 可是在幕布中,我们更习惯把工作和学习分别存放为不同的文件(这也是官方文档里鼓励的存储方式): image 其中“工作”文档内容: image “学习”文档内容: image 回到目录下面,搜索“Python”。 image 可以看到,什么也搜不出来。 因为文件外部...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果