Spring中使用任务计划
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sunny.blog.51cto.com/182601/32366 |
关于在Spring中的任务计划的使用
我今天结合Spring技术手册中的内容,总共总结了5个方面:
1:使用最简单的任务计划,就是继承java.util.TimerTask类,最关键的当然是配置beans-config.xml
文件了,因为我们使用的是spring来管理任务计划。 继承TimerTask类的写法如下: package com; import java.util.TimerTask; public class DemoTask extends TimerTask {
public void run() { System.out.println("任务程序启动,这时我的第一个任务程序......"); } } beans-config.xml的写法如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org <beans> <!--定义定时任务类--> <bean id="demoTask" class="com.DemoTask"/> <bean id="scheduledTimerTask" class="org.springframework.scheduling <!--这里定义定时任务的对象的位置--> <property name="timerTask"> <ref bean="demoTask"/> </property> <!--这里定义每六秒钟程序执行一次--> <property name="period"> <value>6000</value> </property> <!--这里定义程序启动两秒钟后开始执行--> <property name="delay"> <value>2000</value> </property> </bean> <bean id="timerFactoryBean" class="org.springframework.scheduling <property name="scheduledTimerTasks"> <list> <ref bean="scheduledTimerTask"/> </list> </property> </bean> </beans> 启动程序的写法: package com; import java.io.BufferedReader;
import java.io.InputStreamReader; import org.springframework.context
public class TimerTaskDemo {
/**
* @author sunny 这个程序用于测试spring框架中的任务管理,这个一个最简单地 * @param args */ public static void main(String[] args) throws Exception{ new FileSystemXmlApplicationContext System.out.println("启动任务..."); System.out.println("请输入exit关闭程序....."); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while(true){ if(reader.readLine().equals("exit")){ System.exit(0); } } } } 2:当我们在程序中不能继承TimerTask类了
xml的配置文件的写法,程序中需要指定执行哪一个类的哪一个方法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org <beans> <!--定义定时任务类--> <bean id="demoTask" class="com.DemoTask"/> <bean id="timerTaskBean" class="org.springframework.scheduling <property name="targetObject"> <ref bean="demoTask"/> </property> <property name="targetMethod"> <value>run</value> </property> </bean> <bean id="scheduledTimerTask" class="org.springframework.scheduling <!--这里定义定时任务的对象的位置--> <property name="timerTask"> <ref bean="timerTaskBean"/> </property> <!--这里定义每六秒钟程序执行一次--> <property name="period"> <value>6000</value> </property> <!--这里定义程序启动两秒钟后开始执行--> <property name="delay"> <value>2000</value> </property> </bean> <bean id="timerFactoryBean" class="org.springframework.scheduling <property name="scheduledTimerTasks"> <list> <ref bean="scheduledTimerTask"/> </list> </property> </bean> </beans> 3A:由于jdk标准api提供的Timer功能有限
推荐使用Quartz来解决这样的问题。接下来的这个程序仍然是解 QuartzJobBean 类用于重复调用JobData 类的方法执行getData()方法。QuartzJobBean 必须继承QuartzJobBean package com;
import org.quartz.JobExecutionContext;
import org.springframework.scheduling public class DemoJob extends QuartzJobBean {
private JobData jobData;
protected void executeInternal(JobExecutionCon
System.out.println(jobData.getData() + " 第一个已经被执行了!!"); } public JobData getJobData() {
return jobData; } public void setJobData(JobData jobData) {
this.jobData = jobData; } } package com;
import java.text.SimpleDateFormat;
import java.util.Date; public class JobData {
public String getData() { SimpleDateFormat ddd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); return "Data from " + ddd.format(new Date()); } } 关键在于beans-config.xml配置文件的写法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org <beans> <!--定义定时任务类--> <bean id="someData" class="com.JobData"/> <bean id="jobDetailBean" class="org.springframework.scheduling <property name="jobClass"> <value>com.DemoJob</value> </property> <property name="jobDataAsMap"> <map> <entry key="jobData"> <ref bean="someData"/> </entry> </map> </property> </bean> <bean id="simpleTriggerBean" class="org.springframework.scheduling <!--这里定义定时任务的对象的位置--> <property name="jobDetail"> <ref bean="jobDetailBean"/> </property> <!--这里定义每六秒钟程序执行一次--> <property name="repeatInterval"> <value>6000</value> </property> <!--这里定义程序启动两秒钟后开始执行--> <property name="startDelay"> <value>2000</value> </property> </bean> <bean id="timerFactoryBean" class="org.springframework.scheduling <property name="triggers"> <list> <ref bean="simpleTriggerBean"/> </list> </property> </bean> </beans> 启动程序的文件相同。 3B:
如果需求中要求将来的某个时间点执行某项操作,那么配置文件中则必 org.springframework.scheduling <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org <beans> <!--定义定时任务类--> <bean id="someData" class="com.JobData"/> <bean id="jobDetailBean" class="org.springframework.scheduling <property name="jobClass"> <value>com.DemoJob</value> </property> <property name="jobDataAsMap"> <map> <entry key="jobData"> <ref bean="someData"/> </entry> </map> </property> </bean> <bean id="cronTriggerBean" class="org.springframework.scheduling <!--这里定义定时任务的对象的位置--> <property name="jobDetail"> <ref bean="jobDetailBean"/> </property> <!--这里定义每天11点07分的时候程序执行一次--> <property name="cronExpression"> <value>0 07 11 * * ?</value> </property> </bean> <bean id="schedulerFactoryBean" class="org.springframework.scheduling <property name="triggers"> <list> <ref bean="cronTriggerBean"/> </list> </property> </bean> </beans> 4:如果程序不允许继承QuartzJobBean类
来进行处理, package com; /**
* 这里不需要继承quartz类了 * @author Administrator * */ public class DemoJob { private JobData jobData; public JobData getJobData() { return jobData; } public void setJobData(JobData jobData) {
this.jobData = jobData; } public void execute(){
System.out.println(jobData.getData() + " 被执行了。"); } } package com;
import java.text.SimpleDateFormat;
import java.util.Date; public class JobData {
public String getData() { SimpleDateFormat ddd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); return "Data from " + ddd.format(new Date()); } } 具体的xml文件配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org <beans> <!--定义定时任务类--> <bean id="someData" class="com.JobData"/> <bean id="someJob" class="com.DemoJob"> <property name="jobData"> <ref bean="someData"/> </property> </bean> <bean id="jobDetailBean" class="org.springframework.scheduling <property name="targetObject"> <ref bean="someJob"/> </property> <property name="targetMethod"> <value>execute</value> </property> </bean> <bean id="cronTriggerBean" class="org.springframework.scheduling <!--这里定义定时任务的对象的位置--> <property name="jobDetail"> <ref bean="jobDetailBean"/> </property> <!--这里定义每天11点07分的时候程序执行一次--> <property name="cronExpression"> <value>0 27 11 * * ?</value> </property> </bean> <bean id="schedulerFactoryBean" class="org.springframework.scheduling <property name="triggers"> <list> <ref bean="cronTriggerBean"/> </list> </property> </bean> </beans> 本文出自 “我的博客开张了” 博客,请务必保留此出处http://sunny.blog.51cto.com/182601/32366 本文出自 51CTO.COM技术博客 |



张健的博克
博客统计信息
热门文章
最新评论
友情链接