文档章节

Quartz总结(二):定时任务中使用业务类(XXService)

CodingNew
 CodingNew
发布于 2016/06/22 00:01
字数 418
阅读 18
收藏 0

零、引言

上一篇文章:讲到了Spring集成Quartz的几种基本方法。

在实际使用的时候,往往会在定时任务中调用某个业务类中的方法,此时使用QuartzJobBean和MethodInvokeJobDetailFactoryBean的区别就出来了。

一、QuartzJobBean

在继承QuartzJobBean的Job类中,使用XXService的时候,会报 空指针异常,原因是因为使用此方法的时候Job对象的创建时Quartz创建的,而XXXService是通过Spring创建的,两者不是同一个系统的,所以在Job类中使用由Spring管理的对象就会报空指针异常。

其具体使用场景如下:

public class TestJob extends QuartzJobBean {

    @Autowired
    private TestService testSevice;
    
    @Override
    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
        testSevice.sayHi();
        System.out.println(TimeUtils.getCurrentTime());
    }
}

解决方式就是替换系统默认的SchedulerFactory

public class BsQuartzJobFactory extends AdaptableJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;
    
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        
        Object jobInstance=super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return super.createJobInstance(bundle);
    }
}

然后在XML中配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="quartzFactory" class="com.mc.bsframe.job.BsQuartzJobFactory"></bean>

    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="com.mc.bsframe.job.TestJob"></property>
        <property name="durability" value="true"></property>
    </bean>

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="startDelay" value="3000" />
        <property name="repeatInterval" value="2000" />
    </bean>

    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
    <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory" ref="quartzFactory"></property>
        <!-- 管理trigger -->
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger" />
            </list>
        </property>
    </bean>
</beans>

二、使用MethodInvokeJobDetailFactoryBean

因为对象的创建时Spring进行创建的,所以可以直接使用。基于此,推荐大家使用此种方式进行集成,方便,简单。

 

本文转载自:http://www.cnblogs.com/LiuChunfu/p/5598626.html

CodingNew
粉丝 2
博文 76
码字总数 0
作品 0
成都
私信 提问
Spring+Quartz实现定时任务 (二)

在我们进行软件项目开发的过程中,相信大家在很多时候都会遇到如下业务场景:每天、每周或每月生成相应的业务报表;每天统计系统注册人数;定期清理平台长久不登录的用户等等。遇到这种业务场...

yzbty23
2016/04/21
153
0
使用Spring3+Quartz实现定时任务

在本文中,我们使用Spring3+Quartz实现定时任务。spring中定义了一些接口来支持Quartz,可以使你的业务逻辑类和Quartz解耦。 这个例子中使用了如下maven的依赖项: <dependencies> <!-- Spri...

巴顿
2014/01/10
180
0
Window服务基于Quartz.Net组件实现定时任务调度(二)

前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器)。其中job...

艾三元
08/18
0
0
控制台基于Quartz.Net组件实现定时任务调度(一)

前言: 你曾经需要应用执行一个任务吗?比如现在有一个需求,需要每天在零点定时执行一些操作,那应该怎样操作呢? 这个时候,如果你和你的团队是用.NET编程的话,可以考虑使用Quartz.NET调度...

艾三元
08/10
0
0
定时调度系列之Quartz.Net详解

一. 背景   我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始...

dotNET跨平台
2018/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

采坑指南——k8s域名解析coredns问题排查过程

正文 前几天,在ucloud上搭建的k8s集群(搭建教程后续会发出)。今天发现域名解析不了。 组件版本:k8s 1.15.0,coredns:1.3.1 过程是这样的: 首先用以下yaml文件创建了一个nginx服务 apiV...

码农实战
20分钟前
2
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第6题

choose three Which three statements are true about indexes and their administration in an Orade database? A) An INVISIBLE index is not maintained when Data Manipulation Language......

oschina_5359
22分钟前
2
0
阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布

导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新;带来了正式的 feature:G1ElasticHeap;发布了用户期待的 Windows 实验版本 Experimental Windows version。...

阿里巴巴云原生
28分钟前
2
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

xiangyunyan
30分钟前
5
0
js 让textarea的高度自适应父元素的高度

textarea按照普通元素设置height是没有作用的,可以这么来设置, 下面给上一段项目代码 JS代码: $.fn.extend({ txtaAutoHeight: function () { return this.each(function () {...

文文1
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部