Quartz的使用及与spring集成使用

来源:互联网 发布:淘宝店铺海报尺寸 编辑:程序博客网 时间:2024/06/01 14:24

Quartz的使用及与Spring集成使用


简介:Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。

1、Quartz的使用

使用maven导入quart的jar包

        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>2.2.1</version>        </dependency>

JavaQuartzJob.java

public class JavaQuartzJob implements Job{public void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("测试Quartz"+new Date()); }}

测试用例JavaQuartzTest.java

public class JavaQuartzTest {@Testpublic void startScheduler() {// 通过schedulerFactory获取一个调度器SchedulerFactory schedulerfactory = new StdSchedulerFactory();Scheduler scheduler = null;try {// 通过schedulerFactory获取一个调度器scheduler = schedulerfactory.getScheduler();// 创建jobDetail实例,绑定Job实现类// 指明job的名称,所在组的名称,以及绑定job类JobDetail job = JobBuilder.newJob(JavaQuartzJob.class).withIdentity("job", "jgroup").build();// 启动调度scheduler.start();// 定义调度触发规则// 使用simpleTrigger规则,一秒响应一次,一共响应8次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup").withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withRepeatCount(8)).startNow().build();// 使用cornTrigger规则 每天10点42分// Trigger trigger =// TriggerBuilder.newTrigger().withIdentity("simpleTrigger",// "triggerGroup").withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *")).startNow().build();// 把作业和触发器注册到任务调度中scheduler.scheduleJob(job, trigger);// 启动调度scheduler.start();// 等待60秒,保证主线程不停止,如果主线程停止了,任务是不会执行的Thread.sleep(60L * 1000L);} catch (Exception e) {e.printStackTrace();}}}


2、Quartz与Spring集成

再导入spring的相关的jar包

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</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-orm</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-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency>


SpringQuartzJob.java

public class SpringQuartzJob {public void work() {System.out.println("Spring Quartz的任务调度!!!");}}

applicationContext-springQuartz.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><!-- 要调用的工作类 --><bean id="quartzJob" class="com.iteas.cn.quartz.SpringQuartzJob"></bean><!-- 定义调用对象和调用对象的方法 --><bean id="jobtask"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 调用的类 --><property name="targetObject"><ref bean="quartzJob" /></property><!-- 调用类中的方法 --><property name="targetMethod"><value>work</value></property></bean><!-- 定义触发时间 --><bean id="doTime"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail"><ref bean="jobtask" /></property><!-- cron表达式 --><property name="cronExpression"><value>0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?</value></property></bean><!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 --><bean id="startQuertz" lazy-init="false" autowire="no"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="doTime" /></list></property></bean></beans>

SpringQuartzTest.java

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:applicationContext-springQuartz.xml")public class SpringQuartzTest {@Testpublic void startQuartz() {try {// 等待60秒,保证主线程不停止,如果主线程停止了,任务是不会执行的Thread.sleep(60L * 1000L);} catch (Exception e) {}}}


quartz表达式

 <!--  0 0 0 1 * ?       #       1.秒(0-59)    #       2.分钟(0-59)     #       3.小时(0-23)      #       4.月份中的日期(1-31)      #       5.月份(1-12或SUN-DEC)      #       6.星期中的日期(1-7或SUN-SAT)      #       7.年份(1970-2099)      表达式意义      "0 0 12 * * ?" 每天中午12点触发      "0 15 10 ? * *" 每天上午10:15触发      "0 15 10 * * ?" 每天上午10:15触发      "0 15 10 * * ? *" 每天上午10:15触发      "0 15 10 * * ? 2005" 2005年的每天上午10:15触发      "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发      "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发      "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发      "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发      "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发      "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发      "0 15 10 15 * ?" 每月15日上午10:15触发      "0 15 10 L * ?" 每月最后一日的上午10:15触发      "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发      "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发      "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发      每天早上6点      0 6 * * *      每两个小时      0 */2 * * *      晚上11点到早上8点之间每两个小时,早上八点      0 23-7/2,8 * * *      每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点      0 11 4 * 1-3      1月1日早上4点      0 4 1 1 *  




1 0