spring定时任务的两种方法
来源:互联网 发布:ntfs for mac如何用 编辑:程序博客网 时间:2024/05/21 11:16
1.
一共两种方法实现操作。task_1采用继承QuartzJobBean的方法;task_2是采用不继承的方法,配置主要是:
(1).配置JobDetailBean,连接task_1的类名,给属性注入值
<bean name="task1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="task.Task_1" />
<property name="jobDataAsMap">
<map>
<entry key="time" value="Now is 15:55" />
</map>
</property>
</bean>
<!-- 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,
jobClass属性即我们在java代码中定义的任务类,
jobDataAsMap属性即该任务类中需要注入的属性值。 -->
<bean id="task2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="task.Task_2" />
</property>
<property name="targetMethod" value="doTask" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
</bean>
<property name="targetObject">
<bean class="task.Task_2" />
</property>
<property name="targetMethod" value="doTask" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
</bean>
(2).配置SimpleTriggerBean(按照一定的频度,没隔多长时间调用一次)或者CronTriggerBean(指定具体的时间或者其他执行调用一次)
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="task2" />
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
<property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 -->
</bean>
<property name="jobDetail" ref="task2" />
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
<property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 -->
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="task2" />
<!--每天什么时间运行一次 -->
<property name="cronExpression" value="0 * 16-17 * * ?" />
</bean>
<property name="jobDetail" ref="task2" />
<!--每天什么时间运行一次 -->
<property name="cronExpression" value="0 * 16-17 * * ?" />
</bean>
(3).配置SchedulerFactoryBean,连接simpleTriggerBean或者CronTriggeerBean。 配置调度工厂
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers"> <list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean> Task_1:
2.
===========================================================================================================
package task;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
//作业任务一:
//第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。
public class Task_1 extends QuartzJobBean{
private String time = null;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("定时任务开始执行中。。。注入的属性值是:"+time.toUpperCase());
}
}
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
//作业任务一:
//第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。
public class Task_1 extends QuartzJobBean{
private String time = null;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("定时任务开始执行中。。。注入的属性值是:"+time.toUpperCase());
}
}
3.
=================================================================================================================
//作业任务二:
Task_2:
package task;
/*
* 第二种,作业类不继承特定基类。
Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。
这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
* */
public class Task_2 {
public void doTask(){
System.out.println("this is a task by MethodInvokingJobDetailFactoryBean。。。");
}
}
/*
* 第二种,作业类不继承特定基类。
Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。
这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
* */
public class Task_2 {
public void doTask(){
System.out.println("this is a task by MethodInvokingJobDetailFactoryBean。。。");
}
}
=================================================================================================================
//主函数来调动开始:
TestMain:
package task;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
=================================================================================================================
4.
//配置文件:
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 采用继承 QuartzJobBean 的方法实现定时任务-->
<!-- spring配置文件中配置作业类JobDetailBean-->
<bean name="task1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="task.Task_1" />
<property name="jobDataAsMap">
<map>
<entry key="time" value="Now is 15:55" />
</map>
</property>
</bean>
<!-- 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。 -->
<!-- 不采用继承的方法实现定时任务-->
<bean id="task2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="task.Task_2" />
</property>
<property name="targetMethod" value="doTask" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
</bean>
<!--
说明:这一步是关键步骤,声明一个MethodInvokingJobDetailFactoryBean,
有两个关键属性:targetObject指定任务类,targetMethod指定运行的方法。往下的步骤就与方法一相同了,为了完整,同样贴出。
-->
<!--两种继承和不继承的方法都用下面的连个方法触发和调用-->
<!-- 配置作业调度的触发方式(触发器)
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下: -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="task2" />
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
<property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 -->
</bean>
<!-- 第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="task2" />
<!--每天什么时间运行一次 -->
<property name="cronExpression" value="0 * 16-17 * * ?" />
</bean>
<!-- 配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
</beans>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 采用继承 QuartzJobBean 的方法实现定时任务-->
<!-- spring配置文件中配置作业类JobDetailBean-->
<bean name="task1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="task.Task_1" />
<property name="jobDataAsMap">
<map>
<entry key="time" value="Now is 15:55" />
</map>
</property>
</bean>
<!-- 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。 -->
<!-- 不采用继承的方法实现定时任务-->
<bean id="task2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="task.Task_2" />
</property>
<property name="targetMethod" value="doTask" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
</bean>
<!--
说明:这一步是关键步骤,声明一个MethodInvokingJobDetailFactoryBean,
有两个关键属性:targetObject指定任务类,targetMethod指定运行的方法。往下的步骤就与方法一相同了,为了完整,同样贴出。
-->
<!--两种继承和不继承的方法都用下面的连个方法触发和调用-->
<!-- 配置作业调度的触发方式(触发器)
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下: -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="task2" />
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
<property name="repeatInterval" value="3000" /><!-- 每5秒调度一次 -->
</bean>
<!-- 第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="task2" />
<!--每天什么时间运行一次 -->
<property name="cronExpression" value="0 * 16-17 * * ?" />
</bean>
<!-- 配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
</beans>
0 0
- spring定时任务的两种方法
- spring中编写定时任务的两种方法
- spring定时任务的两种使用方法
- spring两种定时任务
- spring两种定时任务
- spring的两种定时任务配置方式
- spring容器框架定时任务实现的两种方式
- spring设置定时任务的两种实现
- spring集成定时任务框架 Quartz的两种方式
- Spring 实现 定时任务(两种)
- 两种spring定时任务详解
- ThinkPHP实现定时执行任务的两种方法
- spring实现定时任务的两种方式之Spring 3整合Quartz 2实现定时任务
- spring定时任务的几种配置方法
- spring实现定时任务的两种方式之spring @scheduled注解方式
- 定时任务的两种方式
- spring的定时任务
- spring的定时任务
- MFC打开文件
- 面向对象设计原则
- 0xC015000F:正被停用的激活上下文不是最近激活的
- mysql触发器学习
- 基于xmpp openfire smack开发之Android客户端开发[3]
- spring定时任务的两种方法
- activeMQ 特点、实战
- UITextView监听事件连续调用三次
- UVa 10407 - Simple division
- 158 整数的素数和分解问题
- 没有什么衣着比穿西装更适合男人!
- 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- 给edittext控件控件设置光标在文字的后边
- opencl