由于我的小项目要用到计划任务的功能,就是每天凌晨更新数据库信息,由于我使用的是ssh框架,所以就毫不犹豫的采用了Spring的quartz来实现。
由此先说说版本,Spring版本不一致,会导致有些包不存在:
Spring 4.1.6
quartz 2.2.1
以上两个版本都可以在官方网站下载到
除了本站有提供的ssh全部jar包
您还可能需要
slf4j-api-1.6.6.jar(在quartz里面),用此包替换掉原由包
quartz-2.2.1.jar
1,首先我们来看看传统方法实现计划任务
a,传统方式需要继承QuartzJobBean类
public class QuartzJob extends QuartzJobBean{ private String command; public void setCommand(String command){ this.command = command; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { for(int i = 1;i<=5;i++){ System.out.println("命令"+command+"第"+i+"次被调用"); } System.out.println(new Date() + "传统Quarts任务调度完毕"); } }b,配置applicationContext.xml
第一步配置bean
<bean id="t_quartzjob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass"> <!-- 任务调度的位置 --> <value>com.spring.jobquartz.QuartzJob</value> </property> <property name="jobDataAsMap"> <map> <entry key="command"> <value>删除</value> </entry> </map> </property> </bean>第二部,配置触发器
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 指定我们的bean --> <property name="jobDetail" ref="t_quartzjob" /> <!-- 延迟多长时间调用 --> <property name="startDelay"> <value>1000</value> </property> <!-- 每隔多长时间调用一次 --> <property name="repeatInterval"> <value>2000</value> </property> </bean>最后启动任务
<bean id="quartzFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="simpleTrigger"/> </list> </property> </bean>以上代码表示传统的计划任务实现方法,最后写个测试,测试即可
ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("applicationContext.xml");
她无需继承QuartzJobBean
只需要配置一下xml即可
a,同样我们先定义bean
<bean id="spring_quartzjob" class="com.spring.jobquartz1.QuartzJob"> <property name="command"> <value>spring新型更新</value> </property> </bean>b,指定需要运行的方法位置
<bean id="MethodInvoking" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="spring_quartzjob" /> <property name="targetMethod" value="test" /> </bean>注意上面的代码,方法名是test,我们已经将测试类的方法改成了test,请知晓
c,定义触发器
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 指定我们的bean --> <property name="jobDetail" ref="MethodInvoking" /> <!-- 延迟多长时间调用 --> <property name="startDelay"> <value>1000</value> </property> <!-- 每隔多长时间调用一次 --> <property name="repeatInterval"> <value>2000</value> </property> </bean>触发器的配置是差不多的
只是传统的触发器,因为继承了QuartzJobBean,所以jobDetail属性配置的是bean
而spring新型触发器,因为没有继承QuartzJobBean,所以jobDetail属性配置的是方法
d,最后启动任务和测试即可
3,那么最后如何实现计划任务呢,也就是定时任务(表达式触发器)
定义任务和上面的2只有一个地方不一样,就是触发器,其他的都是一样的
定时任务的触发器应该像下面这样子来配置
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="MethodInvoking" /> <property name="cronExpression"> <value>05 00 00 * * ?</value> </property> </bean>表达式 cronExpression 他的属性value的意思是
05秒 00分 00 小时 每天 每天 的这个时候来执行这个方法
Ok 了,就这样吧,大家有疑问的话,欢迎大家讨论,感谢。
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情