一、注解方式
1. 在Spring的配置文件ApplicationContext.xml,首先添加命名空间
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd
如果设置了default-lazy-init="true",设置为default-lazy-init="false",否则不会执行
2. 最后是我们的task任务扫描注解
<task:annotation-driven/>
3. spring扫描位置
<context:annotation-config/>
<context:component-scan base-package="com.test"/>
4.写自己的定时任务
@Component //import org.springframework.stereotype.Component;
public class MyTestServiceImpl implements IMyTestService {
@Scheduled(cron="0/5 * * * * ? ") //每5秒执行一次
public void myTest(){
System.out.println("进入测试");
}
}
注意:定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true)
二、XML方式
1.在spring配置文件中创建bean,创建schedule
<bean id="schedule"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger"/>
</list>
</property>
</bean>
2. 在spring配置文件中创建bean,创建你的triggers
<bean id="testTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="testJobDetail" />
<property name="cronExpression" value="0 1/5 * * * ?" />
</bean>
3. 在spring配置文件中创建bean,指定定时器作用在那个类那个方法上面
<bean id="testJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDet ailFactoryBean">
<property name="targetObject" ref="targetTestService" />
<property name="targetMethod" value="timerTest" />
</bean>
//注明:把定时器作用在targetTestService对象中的timerTest方法上面
4. 当然还得把你作用的对象交Spring来管理,所以在spring配置文件中创建作用类的 bean
<bean id="targetTestService" class="com.jwx.fbde.biz.service.TargetTestService" scope="prototype">
</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
相关推荐
本示例工程是一个基于Maven的Web项目,展示了如何通过XML配置和注解两种方式来设置Spring定时器,并且还涉及到使用注解配置线程池。 首先,我们来探讨XML配置方式。在Spring的配置文件(如`applicationContext.xml`...
在标题"spring定时器的包和配置文件"中,我们讨论的核心是Spring如何配置和使用定时器来自动化执行特定的任务。 首先,让我们了解Spring定时任务的基本概念。Spring定时器基于Java的`java.util.Timer`和`java.util....
本文将深入探讨如何使用`@Scheduled`注解和XML配置来创建和管理定时任务。 首先,我们要引入Spring Schedule的依赖。在Maven的`pom.xml`文件中添加以下依赖: ```xml <groupId>org.springframework.boot ...
Spring定时器,也称为Spring的`@Scheduled`注解和`TaskScheduler`接口,提供了更强大且灵活的定时任务管理。Spring使用`@Configuration`类配合`@EnableScheduling`注解开启定时任务功能。在该配置类中,你可以定义一...
这个压缩包文件"ESSH整合Spring 定时器配置资料"很可能包含了详细的步骤文档、示例代码和可能需要的jar包。建议你下载后仔细阅读资料,以便更深入地理解和应用这些配置知识。在实际操作过程中,如果遇到问题,可以...
总的来说,这个"spring定时器简单的demo"是一个基础的Spring定时任务示例,展示了如何通过Spring Task模块在Spring应用中添加定时任务,以及如何在`applicationContext.xml`中进行配置。理解并掌握这一知识,对于...
本篇将详细介绍如何配置和使用Spring的定时器来定时调用任务。 首先,让我们了解Spring Task的核心组件。`TaskExecutor`接口用于异步执行任务,而`TaskScheduler`接口则用于调度定时任务。在这个场景中,我们将重点...
以上内容详细介绍了Spring定时器的相关知识点,包括其基本概念、不同类型的定时器以及实际应用中的配置和实现方法。通过理解和掌握这些知识,开发者可以更高效地利用Spring框架来实现复杂的定时任务功能。
在Spring Boot的应用主类或配置类上添加`@EnableScheduling`注解,这会启动一个后台任务调度器,检查并执行配置的定时任务。 ```java import org.springframework.scheduling.annotation.EnableScheduling; import...
下面将详细阐述Spring定时器的工作原理、配置方法以及使用场景。 1. **工作原理**: Spring定时器基于`java.util.concurrent.ScheduledExecutorService`接口,它是一个线程池服务,可以用来安排在未来某个时间点...
要使用 Maven 构建包含定时任务的 Spring MVC 项目,你需要在 `pom.xml` 文件中添加必要的依赖,例如 Spring MVC 和 Spring Context: ```xml <groupId>org.springframework <artifactId>spring-context ...
集成完成后,我们可以在代码中或通过XML配置文件动态地添加、修改和删除任务。此外,Quartz还支持在数据库中持久化作业和触发器,这样即使应用程序关闭,任务调度信息也不会丢失。在集群环境中,多个Quartz ...
这个压缩包包含了实现Spring 3.1定时器配置所需的资源,包括jar包、文档、XML配置示例以及与Maven和IDEA集成的相关信息。 首先,我们需要了解Spring的定时任务是基于`org.springframework.scheduling`包中的`Task...
### Spring 定时器知识点详解 ...通过上述配置和实现,可以完成一个基本的 Spring 定时任务的开发和部署。这些知识点涵盖了 Spring 定时任务的基本配置和实现细节,为开发者提供了一个清晰的指南。
Spring定时器,通常指的是Spring框架中的任务调度模块,它基于Quartz库进行封装,使得在Spring应用中配置和管理定时任务变得更为简便...这些都是Spring定时器在实际应用中的高级用法,可以根据项目需求灵活选择和配置。
下面我们将深入探讨Spring中的任务调度机制以及如何创建和配置定时任务。 Spring提供了两种主要的调度组件:`org.springframework.scheduling.timer.TimerTaskExecutor`(基于Java的`java.util.Timer`)和`org....
**Spring定时器TimerTask用法** 在Java世界中,`java.util.Timer` 和 `java.util.TimerTask` 是用于实现定时任务的基本工具,但它们在多线程环境中的表现并不理想,容易引发内存泄漏。Spring框架提供了更强大的定时...
Spring的这种定时任务配置方式允许开发者通过XML配置或者基于注解的方式来灵活地定义和管理定时任务,而且Quartz提供了丰富的调度策略,可以满足各种复杂的定时需求。 然后是Java内置的定时器,即`java.util.Timer`...