您的位置:首页 > 编程语言 > Java开发

如何使用spring 定时调度 【 Spring+Quartz实现定时任务 】

2016-11-11 09:55 816 查看
1.Spring整合Quartz实现定时任务步骤很简单,大致需要经过如下几步:创建任务(Job)、配置JobDetail、配置触发器(Trigger)、配置SchedulerFactoryBean

2.首先使用Maven创建一个web项目并引入Spring和quartz的依赖(习惯使用这种开发模式了,当然不使用Maven也可以)

需要引入的依赖包如下:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>

增加完Spring和Quartz的依赖包之后,就需要创建Spring配置文件,并在web.xml文件中引入Spring支持。
----web.xml里面
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/ebs-servlet.xml,
classpath:spring/ebs-security.xml
</param-value>
</context-param>

---ebs-servlet.xml里面
<pre name="code" class="java"> <import resource="classpath:spring/spring-quartz-scheduler.xml" />

---Spring-Quartz.xml里面
    <!-- ======================== 调度触发器 ======================== -->
    <bean id="restoreStockJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
         <property name="jobDetail" ref="restoreStockJob" />
         <property name="cronExpression">
             <value>0 0/1 * * * ?</value>
         </property>
    </bean>
    
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
         <property name="triggers">
             <list>
                  <ref local="restoreStockJobTrigger"/>
                 <ref local="noticeTrigger"/>
                 <ref local="loginclearTrigger"/>
                 <ref local="LhtxTrigger"/>
                 <ref local="SynchroXsddFromErpTrigger"/>
                 <!-- -->
             </list>
         </property>
         <property name="schedulerContextAsMap">
            <map>  
                <!-- spring 管理的service需要放到这里,才能够注入成功 -->  
                <entry key="gwcService" value-ref="gwcService"/>
                <entry key="khxsddService" value-ref="khxsddService"/>  
                <entry key="xtcsService" value-ref="xtcsService"/>  
                <entry key="xsddService" value-ref="xsddService"/>  
                <entry key="dubboService" value-ref="dubboService"/>  
                <entry key="thddService" value-ref="thddService"/>
            </map>  
         </property>
         <property name="jobFactory">
            <bean class="cn.sckj.ebs.common.job.MyJobFactory" />
         </property>
          
    </bean>



创建job类

public class RestoreStockJob extends QuartzJobBean {

private XsddService xsddService;

@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// 开独立线程执行库存还原操作
Thread restoreSCS = new Thread(new Runnable() {
@Override
public void run() {
try {
// 还原购物车库存
xsddService.restoreShoppingCartStock();
} catch (Exception e) {
e.printStackTrace();
}
}
});
restoreSCS.start();

Thread restoreOS = new Thread(new Runnable() {
@Override
public void run() {
try {
// 还原订单库存
xsddService.restoreOrderStock();
} catch (Exception e) {
e.printStackTrace();
}
}
});
restoreOS.start();

}

public void setXsddService(XsddService xsddService) {
this.xsddService = xsddService;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: