关闭

spring schedule定时任务(一):注解的方式

标签: springspring定时任务定时任务spring scheduleschedule
13897人阅读 评论(4) 收藏 举报
分类:
我所知道的java定时任务的几种常用方式:

1、spring schedule注解的方式;
2、spring schedule配置文件的方式;
3、java类继承TimerTask;

第一种方式的实现:

1、使用maven创建spring项目,schedule在spring-context.jar的包下边,因此需要导入与之相关的包;同时,我配的是spring web项目,也同时导入了spring-web和spring-webmvc的包,如下:
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

maven导包配置只需要如下就好,其他相关的依赖,maven会自行解决。

2、配置spring项目的基础文件spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:task="http://www.springframework.org/schema/task"
    xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd">

    <!-- 开启定时任务 -->
    <task:annotation-driven />
    <!-- 开启注解 -->
    <context:annotation-config />
    <!-- 指定相关的包路径 -->
    <context:component-scan base-package="scheduleTest"/>

</beans>


3、编写java业务代码,需要在类声明上边添加@Component注解,并在需要定时任务执行的方法声明上添加@Scheduled(cron = "0/5 * * * * ?")注解以及相关的参数。
参数使用可以参考http://blog.csdn.net/isnotsuitable/article/details/7464556,我示例中表示每五秒执行一次
package scheduleTest;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * spring定时器1
 * 
 * @author tuzongxun123
 *
 */
@Component
public class ScheduleTest {

    @Scheduled(cron = "0/5 * * * * ?")
    public void schTest1() {
        Date date = new Date();
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sim.format(date);
        System.out.println("这是spring定时器1,每五秒执行一次,当前时间:" + dateStr);
    }
}


4、web项目的基础配置文件web.xml,:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>appversion</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <listener>
    <description>spring监听器</description>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


上边的配置中使用了spring的上下文监听器,在这种情况下项目启动后,spring.xml中的定时任务配置才会生效。但是这不是唯一的方法,也可以使用如下的配置,启动项目后可以看到一样的效果:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>appversion</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring.xml</param-value> 
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

这里是吧spring的监听器换成了mvc的调度器,在调度器加载的时候就运行spring.xml中的定时任务配置,因此启动项目后看到效果一样。如果把上边的监听器和mvc的调度器一起配在这里,会看到启动项目后同一时间内这个定时任务需要执行的业务会执行两次。
4
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring 4.x Task 和 Schedule 概述

转载请注明 https://zhangzhaoyu.github.io/2016/09/30/spring-task-and-schedule-deep-research/ 摘要在很多业务场景中,系...
  • TRAMP_ZZY
  • TRAMP_ZZY
  • 2016-09-30 22:52
  • 6396

spring中schedule注解的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 以前框架使用quartz框架执行定时调度问题、 老大说这配置太麻烦、每个调度都需要多加在spring的配置中、 能不能减...
  • yinbucheng
  • yinbucheng
  • 2017-02-15 10:18
  • 789

spring schedule定时任务

1      springschedule定时任务 1.1     前提 spring项目已正常跑通; 1.2     spring配...
  • bejustice
  • bejustice
  • 2015-09-06 16:30
  • 1659

Spring @Schedule Annotation详解

1. Overview 这篇文章中我们将讨论Spring的@Scheduled annotation,并且,将展示如何用它来配置一个定时任务。 要使用@Scheduled annotati...
  • u013613428
  • u013613428
  • 2017-05-05 08:58
  • 863

解析spring schedule

Spring在schedule这块支持JDK Timer、concurrent、quartz三种,这三种任务调度方案在实现机制和调用方法上都不同,但spring通过对其包装,使得基于spring能用统...
  • cutesource
  • cutesource
  • 2009-11-29 14:18
  • 18973

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

以前框架使用quartz框架执行定时调度问题、 老大说这配置太麻烦、每个调度都需要多加在spring的配置中、 能不能减少配置的量从而提高开发效率、 最近看了看spring的 scheduled...
  • sd4000784
  • sd4000784
  • 2012-07-14 09:31
  • 328711

使用spring@Schedule注解定时任务时将时间表达式写入配置文件中的方法

第一种可以把Scheduled写到xml文件中进行配置。第二种在你的类前面添加@PropertySource("classpath:root/test.props")然后修改你的@Scheduled(...
  • SilenceBiuBiu
  • SilenceBiuBiu
  • 2017-05-15 11:22
  • 1726

解析spring schedule 任务调度

Spring在schedule这块支持JDK Timer、concurrent、quartz三种,这三种任务调度方案在实现机制和调用方法上都不同,但spring通过对其包装,使得基于spring能用统...
  • wenzhihui_2010
  • wenzhihui_2010
  • 2013-06-19 12:41
  • 1104

使用Spring的@Scheduled实现定时任务

Spring配置文件xmlns加入 xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation中加入 ...
  • PrisonBreak_
  • PrisonBreak_
  • 2015-10-16 16:23
  • 89494

spring定时任务详解(@Scheduled注解)

在springMVC里使用spring的定时任务非常的简单,如下: (一)在xml里加入task的命名空间 xmlns:task="http://www.springframework.org/sc...
  • qq_33556185
  • qq_33556185
  • 2016-07-07 17:09
  • 69291
    有问题要问?点击QQ联系我!
    有需要,qq联系我
    1160569243
    公告栏
    个人资料
    • 访问:787085次
    • 积分:9966
    • 等级:
    • 排名:第2029名
    • 原创:229篇
    • 转载:38篇
    • 译文:0篇
    • 评论:408条