Quartz2.x学习笔记(三):Quartz2.x整合spring
2017-02-23 10:37
525 查看
spring是个很优秀的框架,它提供了对Quartz的支持。但spring3.1以下的版本不支持Quartz2.x,支持1.x的版本。
下面就简单说说spring整合quartz方法。
我使用的是maven工程。
我导入的依赖的jar包如下:
jdk版本使用的是1.7
RAMJobStore:
接下来建立一个spring的配置文件。
主要步骤如下:
1:定义工作任务的Job
2:定义触发器Trigger,并将触发器与工作任务绑定
3:定义调度器,并将Trigger注册到Scheduler
applicationContext.xml:
classpath下放置log4j配置文件,用于输出日志信息(log4j.properties):
建立配置文件里所指的类:
注意包名与配置文件的对应
如果你是一个web应用 建立web.xml并配置spring,然后部署该项目,启动就可以看到控制台每隔3秒打印的job信息了。
如果你的不是一个web项目,那还需要建立一个类用于测试!
右键run运行即可可到控制台输出信息如下:
(注意这里我使用的是cronTrigger 的配置 相应的在配置文件里要注释掉关于simpletrigger的部分)
可以看到每隔3秒执行一次作业
jdbcjobstore:
上面介绍的是job调度信息保存在rom的方法,但实际应用中经常将job的信息保存到数据库里。下面说下jdbc的配置方法。
改下applicationContext.xml:
上面的配置指向了classpath下的quartz.properties文件,所以还需要增加quartz.properties文件。
完成后,建立测试类如下:
运行后如下:
相应的可以在数据库里看到作业调度的信息。
参考博文:http://blog.csdn.net/u010648555/article/details/54891264
下面就简单说说spring整合quartz方法。
我使用的是maven工程。
我导入的依赖的jar包如下:
<properties> <!-- spring版本号 --> <spring.version>3.2.4.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.8</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <!-- 表示开发的时候引入,发布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- 日志文件管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</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> <!-- 导入Mysql数据库连接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency>
jdk版本使用的是1.7
RAMJobStore:
接下来建立一个spring的配置文件。
主要步骤如下:
1:定义工作任务的Job
2:定义触发器Trigger,并将触发器与工作任务绑定
3:定义调度器,并将Trigger注册到Scheduler
applicationContext.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 1:定义任务的bean ,这里使用JobDetailFactoryBean,也可以使用MethodInvokingJobDetailFactoryBean ,配置类似--> <bean name="hwJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <!-- 指定job的名称 --> <property name="name" value="hw_job"/> <!-- 指定job的分组 --> <property name="group" value="hw_group"/> <!-- 指定具体的job类 --> <property name="jobClass" value="web_statistics.HelloWorldJob"/> <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中会删除该任务 --> <property name="durability" value="true"/> <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 --> <property name="applicationContextJobDataKey" value="applicationContext"/> </bean> <!-- 2.1:定义触发器的bean,定义一个Simple的Trigger,一个触发器只能和一个任务进行绑定 --> <!-- <bean name="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> 指定Trigger的名称 <property name="name" value="hw_trigger"/> 指定Trigger的名称 <property name="group" value="hw_trigger_group"/> 指定Tirgger绑定的Job <property name="jobDetail" ref="hwJob"/> 指定Trigger的延迟时间 1s后运行 <property name="startDelay" value="1000"/> 指定Trigger的重复间隔 5s <property name="repeatInterval" value="5000"/> 指定Trigger的重复次数 <property name="repeatCount" value="5"/> </bean> --> <!-- 2.2:定义触发器的bean,定义一个Cron的Trigger,一个触发器只能和一个任务进行绑定 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- 指定Trigger的名称 --> <property name="name" value="hw_trigger"/> <!-- 指定Trigger的名称 --> <property name="group" value="hw_trigger_group"/> <!-- 指定Tirgger绑定的Job --> <property name="jobDetail" ref="hwJob"/> <!-- 指定Cron 的表达式 ,当前是每隔3s运行一次 --> <property name="cronExpression" value="0/3 * * * * ?" /> </bean> <!-- 3.定义调度器,并将Trigger注册到调度器中 --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <-- <ref bean="simpleTrigger"/>--> <ref bean="cronTrigger"/> </list> </property> <property name="autoStartup" value="true" /> </bean> </beans>
classpath下放置log4j配置文件,用于输出日志信息(log4j.properties):
### 设置### log4j.rootLogger = info,stdout ### 输出信息到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
建立配置文件里所指的类:
import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 测试job * @author Howard * 2017年2月23日 */ public class HelloWorldJob implements Job{ private Logger log = LoggerFactory.getLogger(this.getClass()); @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("作业执行 !"+context.getJobDetail().getKey()); log.info("时间!"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) ); log.info(" \n \n"); } }
注意包名与配置文件的对应
如果你是一个web应用 建立web.xml并配置spring,然后部署该项目,启动就可以看到控制台每隔3秒打印的job信息了。
如果你的不是一个web项目,那还需要建立一个类用于测试!
public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); } }
右键run运行即可可到控制台输出信息如下:
(注意这里我使用的是cronTrigger 的配置 相应的在配置文件里要注释掉关于simpletrigger的部分)
可以看到每隔3秒执行一次作业
jdbcjobstore:
上面介绍的是job调度信息保存在rom的方法,但实际应用中经常将job的信息保存到数据库里。下面说下jdbc的配置方法。
改下applicationContext.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <bean name="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/> <property name="configLocation" value="classpath:quartz.properties"/> </bean> </beans>
上面的配置指向了classpath下的quartz.properties文件,所以还需要增加quartz.properties文件。
# Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different # properties file is not explicitly specified. # #集群配置 org.quartz.scheduler.instanceName: DefaultQuartzScheduler org.quartz.scheduler.rmi.export: false org.quartz.scheduler.rmi.proxy: false org.quartz.scheduler.wrapJobExecutionInUserTransaction: false #调度器的线程池配置 org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount: 10 org.quartz.threadPool.threadPriority: 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 #Quartz默认配置 保存到内存 #org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore #注释掉上面的默认配置 #持久化配置 即保存到数据库 org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties:true #数据库表前缀 org.quartz.jobStore.tablePrefix:qrtz_ org.quartz.jobStore.dataSource:qzDS #============================================================================ # Configure Datasources #============================================================================ JDBC驱动 org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartztest org.quartz.dataSource.qzDS.user:root org.quartz.dataSource.qzDS.password:123456 org.quartz.dataSource.qzDS.maxConnection:10
完成后,建立测试类如下:
package web_statistics; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdScheduler; import org.quartz.impl.StdSchedulerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 测试Quartz jdbc配置方式整合Quartz * @author Howard * 2017年2月23日 */ public class Test2 { private static Scheduler scheduler; public static void main(String[] args) throws SchedulerException, InterruptedException { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过spring的方式获取bean scheduler = (StdScheduler)ac.getBean("scheduler"); // 1、创建一个JobDetail实例,指定Quartz JobDetail jobDetail = JobBuilder.newJob(HelloWorldJob.class) // 任务执行类 .withIdentity("job_1", "group_1")// 任务名,任务组 .build(); // 触发器类型 // SimpleScheduleBuilder builder = SimpleScheduleBuilder // .repeatSecondlyForTotalCount(5, 3); // 设置执行次数 //CronSchedule 每3秒执行一次 CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?"); // 2、创建Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger_1", "group_1").startNow() .withSchedule(builder) .build(); // 3、创建Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail, trigger); // 4、调度执行 scheduler.start(); } }
运行后如下:
相应的可以在数据库里看到作业调度的信息。
参考博文:http://blog.csdn.net/u010648555/article/details/54891264
相关文章推荐
- spring学习笔记(25)spring整合quartz多版本实现企业级任务调度
- spring学习笔记13--Spring2.x+Hibernate3.x +Struts1.x整合开发(1)sh先行组合
- Spring 整合 Quartz 任务调度框架学习笔记
- spring学习笔记spring整合Quartz持久化稳健任务调度(2)
- spring学习笔记(26)spring整合Quartz2持久化稳健任务调度
- Quartz学习笔记-Spring整合与简单使用
- spring学习笔记15--Spring2.x+Hibernate3.x +Struts1.x整合开发(3)struts再次尾随sh
- spring学习笔记17--Spring2.x+Hibernate3.x +Struts1.x整合开发(4)-----Spring提供的CharacterEncoding和OpenSessionInV
- 【SSH学习笔记】整合spring3-struts2的小项目(一)
- 【SSH学习笔记】整合spring3-struts2的小项目(三)
- spring整合hessian学习笔记
- Spring学习笔记 关于spring 2.x中dependency-check标签与Spring3中的实现方式
- Java学习笔记32:Spring整合mybatis使用
- 【SSH学习笔记】整合spring3-hibernate的小项目(一)
- 学习笔记-----------------struts2 hibernate3 spring2.5整合
- SSH整合学习笔记之spring与hibernate简单整合.doc
- struts2学习笔记之spring整合
- SSH整合学习笔记之spring与hibernate整合(二)--C3P0
- struts2学习笔记之spring整合
- Java与Flex学习笔记(7)----将Spring与Flex整合(基于嵌入式tomcat)(2012-07-24 更新)