Spring quartz定时任务的配置与使用
2017-04-12 19:45
561 查看
Maven引入quartz的jar包
创建JobFactory 接口的实现类:用来实例化Job,为了在定时任务中使用@Autowired注入service对象,若不实例化,会导致@Autowired注入为null。
定时任务的配置文件:spring-task.xml
web.xml中引入spring-task.xml:
配置都做完了,可以开始写定时任务的类了:
至此,一个简单的定时任务框架已经搭好了,之前做过若干个定时任务,但都是在前人搭好的框架下,只做实现部分,经过这次开发独立小项目的机会,全面的认识了定时任务的框架及实现流程。
备注:Spring QuartZ Cron表达式
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.2</version> </dependency>
创建JobFactory 接口的实现类:用来实例化Job,为了在定时任务中使用@Autowired注入service对象,若不实例化,会导致@Autowired注入为null。
package com.wx.app.ygp.dbyc.task.jobs; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.scheduling.quartz.SpringBeanJobFactory; /** * * @ClassName: QuartzJobFacotry * @author: huangjp * @date: 2017年4月10日 下午6:49:23 */ public class QuartzJobFacotry extends SpringBeanJobFactory{ @Autowired private AutowireCapableBeanFactory beanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object jobInstance = super.createJobInstance(bundle); beanFactory.autowireBean(jobInstance); return jobInstance; } }
定时任务的配置文件:spring-task.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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.wx.app.ygp.dbyc.task"/> <!-- 大表远传定时任务 --> <bean id="largeTableFarTransferJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="com.wx.app.ygp.dbyc.task.jobs.LargeTableFarTransferJobImpl"></property> </bean> <!-- 大表远传定时任务的触发时间--> <bean id="largeTableFarTransferTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="largeTableFarTransferJob"></property> <property name="cronExpression" value="0 */3 * * * ?"></property> <!-- 设置每三分钟执行一次--> </bean> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="largeTableFarTransferTriggerBean"/> </list> </property> <property name="jobFactory"> <bean class="com.wx.app.ygp.dbyc.task.jobs.QuartzJobFacotry" /> <!-- 实例化Job--> </property> <property name="quartzProperties"> <props> <prop key="org.quartz.scheduler.instanceName">DBYC-QuartzScheduler</prop> </props> </property> </bean> </beans>
web.xml中引入spring-task.xml:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring-core.xml; classpath:spring-mybatis.xml; classpath:spring-task.xml; <!-- 定时任务 --> classpath:spring-dbyc.xml </param-value> </context-param>
配置都做完了,可以开始写定时任务的类了:
package com.wx.app.ygp.dbyc.task.jobs; import java.util.Calendar; import java.util.Date; import java.util.List; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class LargeTableFarTransferJobImpl implements Job{ private static final Logger log = LoggerFactory.getLogger(LargeTableFarTransferJobImpl.class); @Autowired private LargeTableFarTransferService largeTableFarTransferService; @Override @Transactional public void execute(JobExecutionContext context) throws JobExecutionException { Calendar nowC = Calendar.getInstance(); log.info("大表远传定时任务开始"); List<LargeTableFarTransferEntity> tableList = largeTableFarTransferService.getLargeTableList(); log.info("执行大表远传的定时任务,大表的数量是{}",tableList.size()); ..... }
至此,一个简单的定时任务框架已经搭好了,之前做过若干个定时任务,但都是在前人搭好的框架下,只做实现部分,经过这次开发独立小项目的机会,全面的认识了定时任务的框架及实现流程。
备注:Spring QuartZ Cron表达式
相关文章推荐
- java web使用quartz执行定时任务 Spring配置quartz
- 使用spring+quartz配置多个定时任务
- Springboot中使用数据库配置Quartz定时任务
- Spring 定时任务 quartz的配置
- 【定时任务】Spring Boot 中如何使用 Quartz
- Spring+Quartz实现定时任务的配置方法
- Quartz.Net的使用(简单配置方法)定时任务框架
- quartz (二) Spring+Quartz实现定时任务的配置方法
- spring boot 集成quartz 2.0 实现前端动态配置(获取spring上下文)的两种方式,启动数据库中已开启定时任务
- spring-quartz定时任务使用小结
- 使用spring 的Quartz 定时任务入门
- 使用Spring(17)Spring中的定时调度(Scheduling)--传统方式创建Quartz任务
- spring-quartz实现周末节假日排除的定时任务配置
- 基于spring的quartz定时任务的配置详述
- spring使用quartz发布定时任务
- Spring+Quartz实现定时任务的配置方法
- Spring+Quartz实现定时任务的配置方法
- spring配置quartz定时任务
- Spring+Quartz实现定时任务的配置方法
- Spring 定时任务quartz配置及代码示例详解