`

spring4.2 定时任务

 
阅读更多
一.实现定时任务的方式主要有三种
  1.通过JDK自带的类实现,即:java.util.Timer结合java.util.TimerTask,使用这种方式可以让你的程序按照某一个频度执行,但调度控制非常不方便,需要大量代码,不推荐
  2.使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,推荐
  3.Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。

二.实现代码

第一种,java自带的
  定时任务执行类
import java.util.TimerTask;

public class TestTask extends TimerTask{

	@Override
	public void run() {
		System.out.println("定时任务测试");
	}

}

调用定时任务类
import java.util.Date;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.web.context.ContextLoaderListener;

public class TimerContext extends ContextLoaderListener implements ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		Timer timer = new Timer();
	    timer.scheduleAtFixedRate(new TestTask(), new Date(), 2000);
	}

}


如果spring框架,可以继承ContextLoaderListener类,在实现ServletContextListener,然后把web.xml文件配置ContextLoaderListener改为:
<listener>
	<listener-class>com.hebradio.wechat.task.TimerContext</listener-class>
</listener>

如果直接用servlet,那就直接实现ServletContextListener,再在web.xml文件配置上面的监听器

第二种,使用Quartz

第一步:.配置job,有两种方式
(1).继承org.springframework.scheduling.quartz.QuartzJobBean
package com.test.task;

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

public class TestTask extends QuartzJobBean{

	@Override
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		System.out.println("定时任务测试");
		
	}

}

   配置文件中配置作业类
   spring4.2没有JobDetailBean,改为:JobDetailFactoryBean
   <bean id="jobDetailFactory"
        class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="com.test.task.TestTask" />  
        <!--
        <property name="jobDataMap">
            <map>  
                <entry key="timeout" value="5" />
            </map>
        </property>  -->
    </bean>


(2).使用MethodInvokingJobDetailFactoryBean,此时类不用继承任何接口或者类,方法名称可以随便定义
public class TestTask{

	public void test(){
		System.out.println("定时任务测试");
	}

}

 <bean id="jobDetailFactory"
 class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
        <!-- 这个就是具体实现类,如果是注解,则必须为component指定value -->
        <property name="targetObject">
        	<bean class="com.test.task.TestTask"/>
        </property>
        <!-- targetMethod是Spring定时器的特殊属性 -->
        <property name="targetMethod" value="test" />
        <!-- false表示job不会并发执行,默认为true -->
        <property name="concurrent" value="false" />
    </bean>


第二步:配置调度任务执行的触发的时间,两种方式
   (1) 使用SimpleTriggerFactoryBean
    <bean id="simpleTrigger" 
        class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">  
        <property name="jobDetail" ref="jobDetailFactory" />  
        <!-- 第一次执行时间多少毫秒之后  -->
        <property name="startDelay" value="1000" />  
        <!-- 每过多少毫秒执行一次定时任务  -->
        <property name="repeatInterval" value="5000" />  
    </bean>

   (2) 使用CronTriggerFactoryBean
<bean id="cronTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
        <property name="jobDetail" ref="jobDetailFactory" />
       <!-- 每天早上六点执行一次 
        <property name="cronExpression" value="0 0 6 * * ?" /> --> 
       <!--每分执行一次
        <property name="cronExpression" value="0 0/1 * * * ?" /> -->
       <!--每5秒执行一次-->
        <property name="cronExpression" value="0/5 * * * * ?" /> 
    </bean>

  第三步:配置Quartz的调度工厂,调度工厂只能有一个,多个调度任务在list中添加
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <!-- <ref bean="cronTrigger" /> -->
                <ref bean="simpleTrigger" />
            </list>  
        </property>  
    </bean> 

第三种,spring自带的
这种方式在一台电脑上配置成功,但是将代码拷贝到另外两台电脑后,定时任务不执行了,没有找到原因,后来改为上面第二种,如果有知晓的朋友,请告知一下,谢谢
在spring配置文件头引入下面两行

xmlns:task="http://www.springframework.org/schema/task"

xsi:schemaLocation="...
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.2.xsd"


定时任务配置
<!-- 定时任务执行 driven-->
<task:annotation-driven/>


<context:annotation-config/>


<!-- 定时任务所在包 -->
<context:component-scan base-package="com.test.task"/>


package com.test.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component("testTask")
public class TestTask{
	
	@Scheduled(cron="0/5 * * * * ?")//每5秒钟执行一次
	public void testCron(){
		System.out.println("定时任务测试");
	}
	
	@Scheduled(fixedRate=5000, initialDelay=1000)//第一次服务器启动一秒后执行,以后每过5秒执行一次,具体情况请查看Scheduled的方法
	public void test() {
		System.out.println("定时任务测试");
	}

}


记得在类上面加@Component,在方法上加@Scheduled
Scheduled的表达式有两种,即代码中,一种即可,用这种方式,定时任务与定时任务之间是顺序执行的,并没有为每一个定时任务分一个线程
分享到:
评论

相关推荐

    Spring 4.2 集成 Quartz2 任务调度示例

    集成Spring 4.2.2和Quartz 2.2.2可以为你的应用程序提供强大的定时任务能力。通过合理配置,你可以创建复杂的时间调度策略,并利用Spring的依赖注入和事务管理功能,实现高度可维护和可扩展的后台任务。在实际项目中...

    PIMS-spring4.2+struts2.5+jdbc.zip

    标题"PIMS-spring4.2+struts2.5+jdbc.zip"暗示了这是一个软件项目,其中整合了Spring 4.2、Struts 2.5框架以及JDBC(Java Database Connectivity)作为数据访问层。这个项目可能是一个企业级的信息管理系统(PIMS,...

    Spring4.2_Struts2_Hibernate4.3框架整合

    - **Spring Quartz定时器**:集成Quartz库,可以设置定时任务,用于执行周期性的后台工作。 2. **Struts2**: - **Action类**:Struts2中的核心概念,负责接收HTTP请求并调用业务逻辑。 - **拦截器(Interceptor...

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

    **4.2 启用定时任务** 在Spring Boot的主类或者配置类上添加`@EnableScheduling`注解,以启用定时任务功能: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot....

    使用spring @Scheduled注解执行定时任务

    ### 使用Spring `@Scheduled` 注解执行定时任务 在现代软件开发中,特别是企业级应用领域,定时任务处理是一项常见的需求。例如,自动备份数据库、定时发送报告邮件、定期清理缓存等。Spring 框架自3.0版本起引入了...

    spring-task-4.2.xsd.zip

    理解并掌握"spring-task-4.2.xsd"的内容,开发者可以有效地利用Spring Task模块进行任务调度,无论是简单的定时任务还是复杂的异步处理,都能得心应手。在实际开发中,可以将这个xsd文件导入到IDE中,以便在编写...

    spring-framework-4.2.4.RELEASE.rar

    - **Quartz或Spring定时任务**,用于计划执行任务。 - **JMS、AMQP消息队列集成**,支持异步通信。 6. **源码分析**: Spring源码是学习框架设计思想和Java高级技术的好资料。通过阅读源码,可以深入了解依赖...

    Spring boot 实现定时器.docx

    ##### 4.2 定时任务的参数 定时任务方法可以接受参数,这些参数可以通过注入的方式获得。 **示例代码:** ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework....

    spring 4.25版本 xsd文件

    开发者可以定义任务执行器、定时任务以及异步方法的配置。 9. **spring-jee.xsd**:这个文件用于集成Java企业版(Java EE)的服务,如JNDI查找、EJB调用等。它简化了在Spring应用中使用Java EE组件的过程。 10. **...

    spring定时器

    ##### 4.2 定时任务示例 下面是一个具体的示例,展示如何使用Spring定时器每10秒执行一次任务,打印当前时间及访问人员的名称: 1. **Web.xml配置**:在`web.xml`中添加Spring配置文件的位置信息。 ```xml ...

    spring4.2.7jar包

    14. **Spring Batch**:处理批量数据操作的模块,提供了一组高度可重用的组件,用于执行复杂的批量和定时任务。 15. **Spring AMQP**:提供对Advanced Message Queuing Protocol(AMQP)的支持,可以与消息中间件...

    spring源码

    10. **集成支持**:Spring 支持与各种第三方库的集成,如 Quartz 定时任务、Quartz 集群、MyBatis、WebSocket 等,通过 SPI 机制实现了灵活的扩展。 通过深入学习 Spring 4.2 源码,开发者可以更好地理解框架内部的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9...

    高级Java人才培训专家-010-热点文章-定时计算

    传统的Spring定时任务(@Scheduled)存在一些局限性,例如难以处理集群任务的重复执行问题、cron表达式的定义不够灵活、定时任务失败后缺乏重试机制以及不能有效分片执行大量任务等。 #### 3.2 XXL-Job框架的优势 ...

    Spring2.0中文文档

    Spring不仅可以用来开发简单的Java应用程序,还可以轻松地与各种企业服务集成,例如数据库连接池、邮件服务、定时任务等。 #### 4.1 数据源配置 Spring提供了多种方式来配置数据源,比如基于XML的配置或者注解驱动...

    Spring 2.0 开发参考手册

    2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1....

    Spring Boot面试题(2022最新版)-重点

    Spring Boot 支持通过 `@Scheduled` 注解来定义定时任务。可以通过配置定时任务的执行周期(如每天执行一次、每分钟执行一次等)来实现自动化任务处理。 以上是对 Spring Boot 相关知识点的详细解释,涵盖了 Spring...

    spring chm文档

    2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1....

    Spring中文帮助文档

    2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1...

    spring3.1中文参考文档

    - 基础组件包含了事件传播机制、定时任务执行等。 - **1.2.5 测试** - Spring提供了测试框架,简化了单元测试和集成测试的过程。 **1.3 使用方案** - **1.3.1 依赖管理和命名规约** - 讲述了如何在项目中管理...

Global site tag (gtag.js) - Google Analytics