使用java配置定时任务的几种配置方式及示例

摘要:
Spring定时器,主要有两种实现方式,包括JavaTimer定时和Quartz定时器!--启动后的延迟时间--˃2.Quartz定时器首先继承QuartzJobBean类实现executeInternal方法publicclassSchedulerTestextendsQuartzJobBean{@OverrideprotectedvoidexecuteInternalthrowsJobExecutionException{//TODOAuto-generatedmethodstub//System.out.println;System.out.println;}}-------------------------------------------publicclassSchedulerTest2extendsQuartzJobBean{@OverrideprotectedvoidexecuteInternalthrowsJobExecutionException{//TODOAuto-generatedmethodstub//System.out.println;System.out.println;}}Spring配置com.land.SchedulerTestcom.land.SchedulerTest20/10****?

Spring定时器,主要有两种实现方式,包括Java Timer定时和Quartz定时器!

1.Java Timer定时

首先继承java.util.TimerTask类实现run方法

package com.land;

import java.util.Date;
import java.util.TimerTask;

public class TimerTest extendsTimerTask{

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("TimerTest"+(new Date()).toString());

}

}

Spring配置

<bean id="TimerTest"class="com.land.TimerTest">
</bean>

<bean id="TimerTestTask"class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- wait 10 seconds before starting repeated execution -->
<property name="delay" value="10000" /><!-- 启动后的延迟时间-->
<!--间隔时间-->
<property name="period" value="72000" />
<property name="timerTask" ref="TimerTest" />
</bean>


<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<!-- see the example above -->
<ref bean="TimerTestTask" />
</list>
</property>
</bean>

2.Quartz定时器

首先继承QuartzJobBean类实现executeInternal方法
public class SchedulerTestextends QuartzJobBean{

@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
//System.out.println("-----------");
System.out.println("1111111"+(new Date()).toString());
}

}

-------------------------------------------

public class SchedulerTest2extends QuartzJobBean{

@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
//System.out.println("-----------");
System.out.println("22222222"+(new Date()).toString());
}

}

Spring配置

<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.land.SchedulerTest</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.land.SchedulerTest2</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="SchedulerTask" />
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>


<bean class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="SchedulerTask2" />
<property name="startDelay">
<value>1000</value><!--延迟时间-->
</property>
<property name="repeatInterval">
<value>20000</value><!--间隔时间-->
</property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="SchedulerTaskTrigger" />
<ref bean="SchedulerTaskTrigger2" />
</list>
</property>
</bean>

3.其他说明

Java Timer定时有一种配置启动的方org.springframework.scheduling.timer.ScheduledTimerTask,

Quartz定时器有两种配置启动的方式:org.springframework.scheduling.quartz.SimpleTriggerBean,org.springframework.scheduling.quartz.CronTriggerBean。

org.springframework.scheduling.quartz.CronTriggerBean

Linux系统的计划任务通常有cron来承担。从左到右

字段允许值允许的特殊字符
秒0-59, - * /
分0-59, - * /
小时0-23, - * /
日期1-31, - * ?/ L W C
月份1-12 或者 JAN-DEC, - * /
星期1-7 或者 SUN-SAT, - * ? / L C #
年(可选)留空, 1970-2099, - * /
表达式意义
"0 0 12 * * ?"每天中午12点触发
"0 15 10 ? * *"每天上午10:15触发
"0 15 10 * * ?"每天上午10:15触发
"0 15 10 * * ? *"每天上午10:15触发
"0 15 10 * * ? 2005"2005年的每天上午10:15触发
"0 * 14 * * ?"在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?"在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?"在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?"在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED"每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI"周一至周五的上午10:15触发
"0 15 10 15 * ?"每月15日上午10:15触发
"0 15 10 L * ?"每月最后一日的上午10:15触发
"0 15 10 ? * 6L"每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005"2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3"每月的第三个星期五上午10:15触发

特殊字符意义
*表示所有值;
?表示未说明的值,即不关心它为何值;
-表示一个指定的范围;
,表示附加一个可能值;
/符号前表示开始时间,符号后表示每次递增的值;
L("last")("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。
W("weekday")只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第16 天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在day- of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。
#只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。
C指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天。
在MONTH和Day Of Week字段里对字母大小写不敏感

免责声明:文章转载自《使用java配置定时任务的几种配置方式及示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇十一.Java中的集合(set,map,list)nacos无法找到配置,重启后正常下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring Boot -- Spring Boot之热部署、性能优化、打包

一、热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署。 1、热部署原理 原理: 使用类加载器(classloader重新读取字节码文件到jvm内存) 如何纯手写一个热部署功能: 监听 class文件是否发生改变  版本号、修改时间  作对比; 如果发生改变就用classloader进行重新读取; 热部署可以用于在生产...

C#基于Quartz.NET实现任务调度并部署Windows服务

一、Quartz.NET介绍 Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net mvc、.Net Core应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,...

Spring-SpringMVC父子容器&amp;amp;AOP使用总结

此文已由作者尧飘然授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 Spring&SpringMVC Spring&SpringMVC作为bean管理容器和MVC默认框架,是大多数web应用都会选择的方案。在其使用过程中,尽管基于xml的配置bean管理的方式依然存在,但在很多情况下已经采用的强大的注解功能将其替代。...

获取Spring容器中Bean实例的工具类(Java泛型方法实现)

在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean。 因此,实现一个获得bean实例的工具类,就很有必要。 以前,写了一个根据bean的名称和类型获取bean实例的2个工具方法,发现每次调用后,都需要强制转换成目标结果类型。 这样很不方便,突然想到可以使用Java泛型方法,实现1个新的工具方法,避免了类型转换...

JavaWeb总结(十三)

Web开发模式的变迁   了解了Servlet和JSP,知道利用Servlet就可以开发一个Web应用程序,但是Servlet的缺陷使Web应用程序开发变得非常繁琐且不利于分工协作。使用JSP(表达式、声明、scriplet)来开发Web应用程序 Java Web开发变得轻松,但是这样使得页面严重缺乏可读性,并且没有将页面表现和业务逻辑实现分开,维护难度...

面试官说“一开始工资不会给你太高,你可以接受吗?” 怎么怼回去??

面试官:一开始工资不会给你太高,你可以接受吗? 程序员:我一开始工作表现不会太好,你可以接受吗? 面试官:emmmmmm 面试官:“你简历上写着说你心算速度很快,那我问问你,十九乘以十七是多少?” 程序员脱口而出:“三十六!” 面试官:“这也差太远了吧。” 程序员:“但是很快没错吧。” ----我是分割线,重点看下面---- draft_job应用...