`

spring完成定时任务

 
阅读更多

第一种方法:
实现(jdk中)TimerTask的run方法

package com.noly.background.task;

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

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;


public class DailyTask extends TimerTask{

@Override
public void run() {
//do somethings

}


}
配置文件:
<bean id="dailyTask" class="com.noly.background.task.DailyTask" />
<bean id="dailyScheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="dailyTask" />
</property>
任务执行周期 2m 关于一些任务的参数请参考JDK doc文档和Spring相关文档
<property name="period">
<value>300</value>
</property>
延时1m 执行任务
<property name="delay">
<value>60</value>
</property>
</bean>
启动定时器
<bean id="timerBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="dailyScheduledTask" />
</list>
</property>
</bean>
第二种方法:
实现QuartzJobBean(spring核心包中)的executeInternal方法
package com.noly.background.task;

import java.util.Date;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class DailyTask extends QuartzJobBean {

@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
doJob();
}

public void doJob() {

//do somethings

}

}
配置文件:
<bean id="dailyTask" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.noly.background.task.DailyTask</value>
</property>
</bean>
<!-- 这种配置可以精确几点执行定时任务 -->
<bean id="dailyTaskClock" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="dailyTask" />
</property>
<property name="cronExpression">
<value>0 13/1 14 * * ?</value>
</property>
</bean>
<!--启动定时任务-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="dailyTaskClock"></ref>
</list>
</property>
</bean>


时间定义格式:
org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpression属性。
一个cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些元素的定义如下:
1.秒(0–59)
2.分钟(0–59)
3.小时(0–23)
4.月份中的日期(1–31)
5.月份(1–12或JAN–DEC)
6.星期中的日期(1–7或SUN–SAT)
7.年份(1970–2099)
0 0 10,14,16 * * ?
每天上午10点,下午2点和下午4点
0 0,15,30,45 * 1-10 * ?
每月前10天每隔15分钟
30 0 0 1 1 ? 2012
在2012年1月1日午夜过30秒时
0 0 8-5 ? * MON-FRI
每个工作日的工作时间
各个时间可用值如下:
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12 or JAN-DEC , - * /
周几 1-7 or SUN-SAT , - * ? / L C #
年 (可选字段) empty, 1970-2099 , - * /
可用值详细分析如下:
“*”——字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
“?”——字符可以用在“日”和“周几”字段. 它用来指定 '不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。
“-”——字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点"。
“,”——字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。
“/”——字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和45秒"。而 "5/15"则表示"第5, 20, 35, 和 50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。
“L”——字符可用在“日”和“周几”这两个字段。它是"last"的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" —— 对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" —— 比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。
“W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。
“L”和“W”可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。
“#”—— 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而 "4#5" = 该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。
“C”—— 字符可用于“日”和“周几”字段,它是"calendar"的缩写。 它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。
一些例子:
"0 0 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分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14: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

分享到:
评论

相关推荐

    Spring3.0定时任务简单实例web工程

    在Spring框架中,定时任务是实现自动化操作的重要手段,它允许开发者在特定的时间间隔执行特定的任务,例如数据清理、报表生成等。在本实例中,我们关注的是Spring 3.0版本中的定时任务功能,这是一个基于Web工程的...

    Spring中定时任务

    在实际开发中,选择合适的定时任务实现,结合Eclipse和Maven的工具支持,可以高效地完成任务自动化。通过深入理解Spring Task和Quartz的工作原理,以及它们与Spring的集成方式,你可以更好地运用这些工具来提升项目...

    spring动态分配定时任务

    2.通过Spring是JAR-quartz写的一个定时任务 1)普通的定时任务,定时完成指定的任务 2)通过前台动态分配定时任务 可指定多个任务,可同时执行任务,可以精确到时分秒扫描并执行任务 3)可以完成稍微复杂点的任务 ...

    spring定时任务关键jar包(齐全)

    其中,Spring的定时任务功能是许多项目中的重要组成部分,它允许开发者安排和执行周期性的任务。本文将详细探讨Spring定时任务的关键知识点,并与提供的jar包列表关联。 首先,Spring定时任务主要依赖于`spring-...

    spring执行定时任务的规则

    在Spring框架中,实现定时任务主要依赖于Spring的集成模块Spring Integration或通过集成第三方库如Quartz来完成。本文将重点介绍如何利用Spring框架结合表达式规则来配置和执行定时任务,这些规则与Linux中的crontab...

    Spring定时任务(Web项目)

    1. 定时任务通常在Spring容器启动后立即运行,因此需要确保Spring容器在Web应用启动时已完成初始化。 2. 如果定时任务涉及数据库操作,需要确保数据库连接已经建立并可用。 3. 为了防止并发执行,可使用`@...

    spring的定时任务和异步方法

    本篇将详细探讨Spring中的定时任务和异步方法,帮助开发者更好地理解如何在项目中实现定时任务调度和提高程序执行效率。 首先,我们来关注Spring的定时任务。Spring提供了`@Scheduled`注解,通过这个注解,我们可以...

    quartz2 与spring4 集成 定时任务Job

    7. **监控与管理**:一旦集成完成,你可以通过Spring的管理接口或者Quartz提供的JMX支持来监控和管理定时任务,如暂停、恢复、删除任务,或者查看任务状态。 除了基本的集成,还可以利用Spring的特性如AOP进一步...

    (动态多)定时任务源码自动运行调度后台执行

    1、spring 定时任务demo 2、定时任务(xxl-job)(XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。) 3、...

    spring定时任务

    在Spring框架中,定时任务是实现自动化操作的重要功能,它允许开发者在特定时间点或按照预设周期执行任务。Spring提供了两种主要的方式来配置定时任务:基于XML和基于Java-config的配置方式。 首先,我们来详细了解...

    spring整合java quartz实现动态定时任务的前台网页配置与管理

    在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...

    Maven+SpringMVC+SpringTask定时任务

    【标题】"Maven+SpringMVC+SpringTask定时任务"是将三个强大的Java技术框架集成,用于构建具有定时执行功能的Web应用。Maven是一个项目管理工具,它帮助管理和构建Java项目,通过依赖管理和项目信息管理使得开发更加...

    IntelliJ IDEA中创建Spring boot项目,定时任务测试

    4. **添加依赖**:在Dependencies(依赖)一栏,可以通过搜索框添加Spring Boot的定时任务支持,即`spring-boot-starter-quartz`或`spring-boot-starter-task`。后者是Spring Boot官方推荐的定时任务解决方案。 5. ...

    基于Spring的Quartz动态定时任务增删改查

    基于Spring的Quartz动态定时任务增删改查,代码简洁。后端采用SpringMvc+Spring+Mybatis+Quartz,前端采用Bootstrap框架,数据库采用MySQL;完成定时任务动态任务初始化,增删改查

    Springboot中使用数据库配置定时任务

    在Spring Boot应用中,我们可以利用其强大的自动化配置和Spring Task模块来实现基于数据库配置的定时任务。Spring Task是Spring框架的一部分,它提供了丰富的定时和调度功能,使得在Java应用中执行周期性任务变得...

    Spring中实现定时任务

    在Spring框架中,定时任务是应用开发中常见的一种需求,比如定期执行数据清理、日志归档或发送通知等。Spring提供了多种方式来实现定时任务,包括使用`Quartz`和`Spring Task`(也称为Spring Scheduler)。这篇博客...

    spring定时任务示例程序

    在Spring框架中,定时任务是实现应用程序自动化执行特定任务的重要功能。这个"spring定时任务示例程序"旨在演示如何在Spring环境中配置和使用定时任务。本示例使用了Quartz库,它是一个强大的、完全开源的作业调度...

    Spring定时任务的几种实现

    通过上述步骤,我们便完成了基于Spring框架的定时任务实现。总的来说,Quartz和Spring Task各有优势:Quartz功能更加强大,配置相对复杂;而Spring Task则更加简单直观,易于上手。选择哪种方式取决于具体的业务需求...

    Spring Boot中的@Scheduled注解:定时任务的原理与实现

    ### Spring Boot中的@Scheduled注解:定时任务的原理与实现 #### 一、引言 在现代软件开发中,定时任务是一种非常常见的需求。无论是数据同步、定期清理缓存还是发送提醒邮件,都需要应用程序能够在特定的时间点...

    Spring 定时任务-1

    在这个特定的场景中,我们关注的是Spring的定时任务功能,这允许开发者安排任务在特定时间执行,而无需编写复杂的调度代码。接下来,我们将深入探讨Spring定时任务的相关知识点。 首先,Spring定时任务主要通过`...

Global site tag (gtag.js) - Google Analytics