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

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;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值