开发环境: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不需要定义。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yefriendly/archive/2008/05/28/2490789.aspx
分享到:
相关推荐
Spring 2 和 Quartz 是两个在 Java Web 开发中非常重要的框架。Spring 是一个全面的开源应用框架,提供了依赖注入(DI)、面向切面编程(AOP)以及丰富的数据访问和事务管理功能。Quartz,则是一个功能强大的作业...
Spring 中的 Quartz 配置-Spring 定时器-...我们学习了 Quartz 的基本概念,了解了如何在 Spring 配置文件中定义 Quartz 的 bean,并了解了 Cron 表达式的使用。最后,我们总结了 Quartz 的优点,了解了它的强大功能。
Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...
如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...
spring2.0 使用 Quartz 必备包 里面有: quartz-all-1.5.2.jar spring-support.jar 适合:SSH框架 spring2.0 strut2.0 hibernate3.2等
Spring 和 Quartz2 是两个在 Java 开发中广泛使用的框架,它们在企业级应用中承担着重要的角色。Spring 是一个全面的、开源的应用框架,而 Quartz2 是一个强大的、开源的作业调度库,常用于实现定时任务。下面我们将...
5. **监听器**:Quartz 2.x 提供了更丰富的监听器功能,可以在 Spring 配置中添加 JobListener 和 TriggerListener。 6. **Cron 表达式**:在定义 Trigger 时,可以使用更灵活的 Cron 表达式,如 `@Scheduled(cron ...
在Spring中使用Quartz进行任务调度时,首先需要创建一个被调度的类。示例代码如下: ```java package com.kay.quartz; public class QuartzJob { public void work() { System.out.println("Quartz的任务调度!...
而Spring-Quartz则是Spring框架对Quartz的集成,它使得在Spring应用中使用Quartz变得更加方便。 Quartz的核心概念包括Job(作业)、Trigger(触发器)和Calendar(日历)。Job是实际要执行的任务,Trigger定义了Job...
在Spring中,通常会使用`org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean`来包装一个带有@Scheduled注解的方法。 5. **Cron表达式** CronTrigger允许使用Cron表达式来定义触发时间,如...
Spring 提供了与 Quartz 集成的模块,使得在 Spring 应用程序中使用 Quartz 更加便捷,包括 Job 实例的管理、触发器的配置以及对 Quartz Scheduler 的控制。 在这个 "spring+quartz demo" 中,我们可以学习到如何将...
通过这个项目,开发者可以学习到如何在分布式环境中使用Quartz进行定时任务调度,以及如何利用Spring Batch进行批量数据处理。同时,了解如何将这些组件与MySQL数据库相结合,实现高可用性和可扩展性。对于希望构建...
下面我们将深入探讨这两种任务调度器及其在Spring中的使用。 首先,我们来看`Spring Timer`。`Spring Timer`是Spring框架提供的一个简单任务调度工具,它基于Java的`java.util.Timer`类。通过`@Scheduled`注解,...
在本文中,我们将探讨Spring与Quartz的两种整合方式以及Spring自身提供的定时任务功能。 ### Spring整合Quartz的方式 #### 1. 配置驱动的方式 这种方式主要是通过XML配置来创建和管理Quartz的Scheduler实例。首先...
通过以上步骤,你就可以成功地在Spring中整合Quartz并使用JDBC存储任务信息了。这种方式不仅方便了任务的管理和持久化,还支持集群部署,提高了系统的可靠性。在实际应用中,你可能还需要根据具体需求调整触发器类型...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及众多其他功能,极大地简化了Java应用的构建。而Quartz...
Java Spring 框架是企业级应用开发的热门选择,它提供了一种全面的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect Oriented Programming,AOP)的解决方案,使得开发者能够更加专注于业务逻辑的实现,...
配置Quartz通常需要在Spring配置文件中声明`SchedulerFactoryBean`,并设置相关的bean。例如: ```xml <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 这里...
springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例
2. **配置 MethodInvokingJobDetailFactoryBean**:接下来,在 Spring 配置文件中使用 `<bean>` 标签定义一个 `MethodInvokingJobDetailFactoryBean` 类型的 bean,并设置相应的属性。这些属性包括: - `target...