`

Spring中使用Quartz的2种方法

阅读更多

开发环境:Spring2.0。如果包类没有Quartz包,则需要加入到类路径。

A:extends QuartzJobBean方法

1:定义任务(extends QuartzJobBean)

 

package onlyfun.bb.Quartz;
import org.quartz.JobExecutionContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class QuartzDemo extends QuartzJobBean {
    private JobData jobData; //JobData为自定义类
    public void executeInternal(JobExecutionContext context){
       System.out.println(jobData.getData()+" is executed");
    }
    public JobData getJobData() {
       return jobData;
    }
    public void setJobData(JobData jobData) {
       this.jobData = jobData;
    }
}
JobData.java:
package onlyfun.bb.Quartz;
import java.util.Date;
public class JobData {
    public String getData(){
       return "Data from JobData at "+new Date().toString();
    }
}

 2: 配置

 

 

<!-- use Quartz -->
<bean id="someData" class="onlyfun.bb.Quartz.JobData"></bean>
<bean id="jobDetailBean" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="onlyfun.bb.Quartz.QuartzDemo"></property>
    <property name="jobDataAsMap">
      <map>
        <entry key="jobData" value-ref="someData"></entry>
      </map>
    </property>
</bean>
<bean id="simpleTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="jobDetailBean"></property>
    <property name="repeatInterval" value="2000"></property>
    <property name="startDelay" value="1000"></property>
</bean>
<bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
     <list>
       <ref bean="simpleTriggerBean"/>
     </list>
   </property>
</bean>

 注意:在JobDetailBean的jobClass属性必须提供Job的类名称,而不是Job类的实例。Job所需的数据可以在jobDataAsMap属性中设置。

 

在任务的周期指定上,使用SimpleTriggerBean类来指定,与TimerTask指定方式类似。

排定Job用SchedulerFactoryBean类。

完成设置后,只要在启动Spring并读取定义文件后,计划任务就会执行。

 

3:测试

 

package onlyfun.bb.Quartz;
import java.io.*;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestQuartzDemo {
    public static void main(String[] args) throws IOException {
       // TODO Auto-generated method stub
       ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
       System.out.println("启动Task:");
       System.out.println("请输入 exit 结束Task:");
       //A处
       BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
       while(true){
           if(reader.readLine().equals("exit")) break; }
       //此句可以放在A处
       Scheduler scheduler=(Scheduler)context.getBean("scheduledFactoryBean");
       try {
           scheduler.shutdown();
       } catch (SchedulerException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    }
}

 4:测试分析:

 

使用SimpleTriggerBean类只能做简单Job与Job之间的执行周期指定,如果需要在指定时间执行,可以使用CronTriggerBean类。

修改配置文件如下:

 

<!-- use Quartz -->
<bean id="someData" class="onlyfun.bb.Quartz.JobData"></bean>
<bean id="jobDetailBean" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="onlyfun.bb.Quartz.QuartzDemo"></property>
    <property name="jobDataAsMap">
      <map>
        <entry key="jobData" value-ref="someData"></entry>
      </map>
    </property>
</bean>
<bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="jobDetailBean"></property>
    <property name="cronExpression" value="0 37-38 15 * * ?"/>
</bean>
<bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
     <list>
       <ref bean="cronTriggerBean"/>
     </list>
   </property>
</bean>

 注意:CronTriggerBean的cronExpression属性指定格式:至少6个时间元素,上面表示每天的15:37-38分执行1次任务。

 

时间元素(按照顺序):

秒(0-59):

分(0-59):

小时(0-23):

每月第几天(1-31):

月(1-12或JAN-DEC):

每星期第几天(1-7或SUN-SAT):

年(1970-2099):

其中:不用设置的用”?”.

(1)每月第几天和每星期第几天是互斥的,两个只能设置1个。如果有好几个时间点,可以使用”,”符号,例如:”0 0 10,12,14 * * ?”表示每天的10时,12时,14时执行Job.

(2)对于连续时间可以使用”-”符号。例如:”0 10,12,14 1-15 * ?”表示每月的1到15日10时,12时,14时执行Job.

(3)时间格式的年可以不用制定。例如”0 0 10,12,14 ? MON 2006”表示2006年每星期一的10时,12时,14时执行Job.

B:不需要继承的任务制定方法

 

使用Spring不一定需要继承QuartzJobBean类来定义1个Job类,可以使用MethodInvokingJobDetailFactoryBean来直接指定执行某个对象的方法。

修改如下:

1:建立Job类(普通类)

package onlyfun.bb.Quartz;
/**使用MethodInvokingJobDetailFactoryBean类制定任务:
* 1个Job类:没有继承QuartzJobBean
* @author Administrator
*
*/
public class QuartzDemo2 {
    private JobData jobData;
    public void execute(){
       System.out.println(jobData.getData()+ "is executed");
    }
    public JobData getJobData() {
       return jobData;
    }
    public void setJobData(JobData jobData) {
       this.jobData = jobData;
    }
}

 

2: 修改配置

<bean id="someData" class="onlyfun.bb.Quartz.JobData"></bean>
<bean id="someJob" class="onlyfun.bb.Quartz.QuartzDemo2">
   <property name="jobData" ref="someData"></property>
</bean>
<bean id="jobDetailBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="someJob"></property>
    <property name="targetMethod" value="execute"></property>
</bean>
<bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="jobDetailBean"></property>
    <property name="cronExpression" value="0 6 16 * * ?"/>
</bean>
<bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
     <list>
       <ref bean="cronTriggerBean"/>
     </list>
   </property>
</bean>

 此处配置主要修改了粗体部分。对作为1个Job的类进行了定义。而方法A不需要定义。

分享到:
评论

相关推荐

    spring2与quartz在Web整合

    Spring 2 和 Quartz 是两个在 Java Web 开发中非常重要的框架。Spring 是一个全面的开源应用框架,提供了依赖注入(DI)、面向切面编程(AOP)以及丰富的数据访问和事务管理功能。Quartz,则是一个功能强大的作业...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-...我们学习了 Quartz 的基本概念,了解了如何在 Spring 配置文件中定义 Quartz 的 bean,并了解了 Cron 表达式的使用。最后,我们总结了 Quartz 的优点,了解了它的强大功能。

    SpringQuartz的使用文档

    Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...

    spring2.0 使用 Quartz 必备包

    spring2.0 使用 Quartz 必备包 里面有: quartz-all-1.5.2.jar spring-support.jar 适合:SSH框架 spring2.0 strut2.0 hibernate3.2等

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    5. **监听器**:Quartz 2.x 提供了更丰富的监听器功能,可以在 Spring 配置中添加 JobListener 和 TriggerListener。 6. **Cron 表达式**:在定义 Trigger 时,可以使用更灵活的 Cron 表达式,如 `@Scheduled(cron ...

    Spring+Quartz2

    Spring 和 Quartz2 是两个在 Java 开发中广泛使用的框架,它们在企业级应用中承担着重要的角色。Spring 是一个全面的、开源的应用框架,而 Quartz2 是一个强大的、开源的作业调度库,常用于实现定时任务。下面我们将...

    关于spring中quartz的配置

    如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...

    Spring中Quartz的配置

    在Spring中使用Quartz进行任务调度时,首先需要创建一个被调度的类。示例代码如下: ```java package com.kay.quartz; public class QuartzJob { public void work() { System.out.println("Quartz的任务调度!...

    quartz和spring-quartz

    而Spring-Quartz则是Spring框架对Quartz的集成,它使得在Spring应用中使用Quartz变得更加方便。 Quartz的核心概念包括Job(作业)、Trigger(触发器)和Calendar(日历)。Job是实际要执行的任务,Trigger定义了Job...

    spring+quartz demo

    Spring 提供了与 Quartz 集成的模块,使得在 Spring 应用程序中使用 Quartz 更加便捷,包括 Job 实例的管理、触发器的配置以及对 Quartz Scheduler 的控制。 在这个 "spring+quartz demo" 中,我们可以学习到如何将...

    spring的quartz使用实例

    在Spring中,通常会使用`org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean`来包装一个带有@Scheduled注解的方法。 5. **Cron表达式** CronTrigger允许使用Cron表达式来定义触发时间,如...

    spring timer、quartz俩种任务调度

    下面我们将深入探讨这两种任务调度器及其在Spring中的使用。 首先,我们来看`Spring Timer`。`Spring Timer`是Spring框架提供的一个简单任务调度工具,它基于Java的`java.util.Timer`类。通过`@Scheduled`注解,...

    quartz整合springbatch动态集群定时实现mysql参考

    通过这个项目,开发者可以学习到如何在分布式环境中使用Quartz进行定时任务调度,以及如何利用Spring Batch进行批量数据处理。同时,了解如何将这些组件与MySQL数据库相结合,实现高可用性和可扩展性。对于希望构建...

    springtask 和 quartz +ssh简单示例

    springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例

    spring整合quartz两种方式以及spring自带定时任务使用

    在本文中,我们将探讨Spring与Quartz的两种整合方式以及Spring自身提供的定时任务功能。 ### Spring整合Quartz的方式 #### 1. 配置驱动的方式 这种方式主要是通过XML配置来创建和管理Quartz的Scheduler实例。首先...

    Java_Spring与Quartz的整合

    Java Spring 框架是企业级应用开发的热门选择,它提供了一种全面的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect Oriented Programming,AOP)的解决方案,使得开发者能够更加专注于业务逻辑的实现,...

    spring整合quartz使用jdbc存储

    通过以上步骤,你就可以成功地在Spring中整合Quartz并使用JDBC存储任务信息了。这种方式不仅方便了任务的管理和持久化,还支持集群部署,提高了系统的可靠性。在实际应用中,你可能还需要根据具体需求调整触发器类型...

    spring+quartz使用jar包

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及众多其他功能,极大地简化了Java应用的构建。而Quartz...

    spring之定时任务实现(spring-task和quartz等不同方式)

    配置Quartz通常需要在Spring配置文件中声明`SchedulerFactoryBean`,并设置相关的bean。例如: ```xml &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;!-- 这里...

    spring boot + quartz 动态管理 分布式

    在IT行业中,Spring Boot和Quartz是两个非常重要的框架,它们在企业级应用开发中扮演着关键角色。Spring Boot简化了Spring应用的初始搭建以及开发过程,提供了开箱即用的功能,而Quartz则是一个强大的任务调度库,常...

Global site tag (gtag.js) - Google Analytics