spring定时器 <!-- 第一步 声明一个定时任务,注意不是直接声明,而是声明一个JobDetailBean,通过jobClass属性设置一个定时对象 --> <bean id="quartzClock" .....................下载再看 ### Spring 定时器知识点详解 #### 一、Spring 定时器概述 Spring 框架提供了多种方式来实现定时任务,其中一种常见的方法是使用 Quartz 作为定时任务的调度器。Quartz 是一个开源的作业调度工具,能够触发在 Java 应用程序中定义的作业,并且支持复杂的循环策略。 #### 二、Spring 配置定时任务 在 Spring 中配置定时任务主要分为以下几个步骤: 1. **声明 JobDetailBean:** - **JobDetailBean** 是用来封装一个具体的定时任务的 Bean。 - 通过 `<bean>` 标签定义一个 `JobDetailBean` 类型的 Bean,其 `id` 属性标识该 Bean 的唯一名称,`class` 属性指定该 Bean 的具体实现类。 - `jobClass` 属性用于设置执行定时任务的具体类,该类需要实现 `org.quartz.Job` 接口或继承 `org.springframework.scheduling.quartz.QuartzJobBean`。 ```xml <bean id="quartzClock" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>cn.xg.spring.QuartzClock</value> </property> </bean> ``` 2. **配置 SimpleTriggerBean 或 CronTriggerBean:** - **SimpleTriggerBean** 可以定义简单的重复触发机制。 - `startDelay` 表示首次触发前的延迟时间(毫秒)。 - `repeatInterval` 表示重复触发的时间间隔(毫秒)。 - **CronTriggerBean** 可以定义更复杂的触发规则,如基于日历的触发。 - `cronExpression` 表示 cron 表达式,用于定义复杂的触发规则。 ```xml <bean id="quartzClockTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="quartzClock"/> </property> <property name="startDelay"> <value>6000</value> </property> <property name="repeatInterval"> <value>6000</value> </property> </bean> <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="quartzClock"/> </property> <property name="cronExpression"> <value>0 5 22 * * ?</value> </property> </bean> ``` 3. **配置 SchedulerFactoryBean:** - `SchedulerFactoryBean` 负责管理所有定时任务的调度。 - 通过 `<property name="triggers">` 设置一个触发器列表,其中包含所有需要调度的任务触发器。 ```xml <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronQuartzClock"/> </list> </property> </bean> ``` #### 三、Cron 表达式的解析 Cron 表达式由六个或七个字段组成,分别表示: 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 8-5 ? * MON-FRI` 表示工作日每天早上 8 点至下午 5 点每小时整点触发一次。 - `0 0/15 * * * ?` 表示每小时的第 0 分钟,每隔 15 分钟触发一次。 - `0 30 0 11 ? 2012` 表示在 2012 年 11 月 1 日凌晨 0 点 30 分触发。 #### 四、定时任务实现类 定时任务的具体实现通常需要继承 `QuartzJobBean` 或实现 `Job` 接口。 ```java package cn.xg.spring; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class QuartzClock extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("QuartzClock..!QuartzClock.!."); } } ``` #### 五、启动定时任务 启动定时任务可以通过加载 Spring 配置文件来实现。 ```java package cn.xg.spring; import org.apache.log4j.Logger; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { public static Logger log = Logger.getLogger(SpringTest.class); public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // ... } } ``` 通过上述配置和实现,可以完成一个基本的 Spring 定时任务的开发和部署。这些知识点涵盖了 Spring 定时任务的基本配置和实现细节,为开发者提供了一个清晰的指南。
<bean id="quartzClock" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>cn.xg.spring.QuartzClock</value>
</property>
</bean>
<!-- 第二步 调度定时任务 -->
<!--这种配置与第一种方法效果一样
<bean id="quartzClockTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="quartzClock"/>
</property>
<property name="startDelay">
<value>6000</value>
这里是服务启动后延时多少时间,开始计时任务,单位ms
</property>
<property name="repeatInterval">
<value>6000</value>
这里是每隔多长时间就进行一次计时任务,单位ms
</property>
</bean>
-->
<!-- 这种配置可以精确几点执行定时任务 -->
<bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="quartzClock"></ref>
</property>
<property name="cronExpression">
<value>0 52 22 * * ?</value><!--定时在任何月份任何日期(不管星期几)的22点52分0秒 -->
<!-- 一个cron表达式有到少6个(也可能是7个)由空格分隔的时间元素.从左到右,这些元素的定义如下:
2.分钟(0-59)
3.小时(0-23)
4.月份中的是期(1-31)
5.月份(1-12或SUN-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 每个工作日的工作时间
- 区间
* 通配符
? 你不想设置那个字段
-->
</property>
</bean>
<!--第三步 启动定时任务,注意这里的ref bean -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronQuartzClock"></ref>
</list>
</property>
</bean>
</beans>
===================================================以下是新建的类======================================================
package cn.xg.spring;
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助