Java Spring中Quartz调度器详解及实例

2025-05-29 0 62

一、Quartz的特点

* 按作业类的继承方式来分,主要有以下两种:

1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式

2.作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式

注:个人比较推崇第二种,因为这种方式下的作业类仍然是POJO。

* 按任务调度的触发时机来分,主要有以下两种:

1.每隔指定时间则触发一次,对应的调度器org.springframework.scheduling.quartz.SimpleTriggerBean

2.每到指定时间则触发一次,对应的调度器org.springframework.scheduling.quartz.CronTriggerBean

注:这两种触发方式均可以跟两种作业继承方式相互组合来使用。

下面简单演示一下在springQuartz的用法。

二、作业类继承org.springframework.scheduling.quartz.QuartzJobBean类,每到指定时间则触发一次

1.编写作业类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
package bean.jobDetailBean;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class Job1 extends QuartzJobBean {

private int timeout;

private static int i = 0;

//调度工厂实例化后,经过timeout时间开始执行调度

public void setTimeout(int timeout) {

this.timeout = timeout;

}

/**

* 要调度的具体任务

*/

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

System.out.println("继承QuartzJobBean的方式-调度" + ++i + "进行中...");

}

}

2.配置作业类

?

1

2

3

4

5

6

7

8

9
<!-- 作业使用继承QuartzJobBean的方式 -->

<bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="jobClass" value="bean.jobDetailBean.Job1" />

<property name="jobDataAsMap">

<map>

<entry key="timeout" value="0" />

</map>

</property>

</bean>

3.配置作业调度的触发方式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
<!-- 对应于作业继QuartzJobBean类的方式 -->

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="job1" />

<!--

"cronExpression"的配置说明

字段 允许值 允许的特殊字符

0-59 , - * /

0-59 , - * /

小时 0-23 , - * /

日期 1-31 , - * ? / L W C

月份 1-12 或者 JAN-DEC , - * /

星期 1-7 或者 SUN-SAT , - * ? / L C #

年(可选) 留空, 1970-2099 , - * /

- 区间

* 通配符

? 你不想设置那个字段

-->

<!-- 每分钟的第0,10,20,30,40,50秒调度一次 -->

<property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" />

</bean>

4.配置调度工厂

?

1

2

3

4

5

6

7
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="cronTrigger" />

</list>

</property>

</bean>

5.开启调度

?

1

2

3

4

5

6

7

8

9

10

11
package test;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ScheduleTest {

public static void main(String[] args){

<span style="white-space:pre"> </span>BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");

}

}

三、作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类,每隔指定时间则触发一次

1.编写作业类

?

1

2

3

4

5

6

7

8

9

10
package bean.jobDetailBean;

public class Job2 {

private static int i = 0;

public void doJob2() {

System.out.println("不继承QuartzJobBean方式-调度" + ++i + "进行中...");

}

}

2.配置作业类

?

1

2

3

4

5

6

7

8
<bean id="job2"

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject">

<bean class="bean.jobDetailBean.Job2" />

</property>

<property name="targetMethod" value="doJob2" />

<property name="concurrent" value="false" /><!-- 作业不并发调度 -->

</bean>

3.配置作业调度的触发方式

?

1

2

3

4

5
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">

<property name="jobDetail" ref="job2" />

<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->

<property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->

</bean>

4.配置调度工厂

?

1

2

3

4

5

6

7
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="simpleTrigger" />

</list>

</property>

</bean>

5.开启调度

?

1

2

3

4

5

6

7

8

9

10

11

12
package test;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ScheduleTest {

public static void main(String[] args){

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");

}

}

简单说明spring自带调度器的例子。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java Spring中Quartz调度器详解及实例 https://www.kuaiidc.com/118379.html

相关文章

猜你喜欢
发表评论
暂无评论