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

我所知道的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的调度器一起配在这里,会看到启动项目后同一时间内这个定时任务需要执行的业务会执行两次。

时间: 2024-11-30 20:39:40

spring schedule定时任务(一):注解的方式的相关文章

spring schedule定时任务(二):配置文件的方式

接着上一篇,这里使用spring配置文件的方式生成spring定时任务. 1.相应的web.xml没有什么变化,因此便不再罗列.同样的,相应的java代码业务逻辑改动也不大,只是在原来的基础上去掉@Component和@Scheduled(cron = "0/5 * * * * ?")参数,也就是把这个类和方法变成一个最简单的java类和方法就可以了. 2.既然是配置文件的方式,那么改动大的自然就是pring.xml配置,把原本用注解实现的定时功能放到配置中来,改动后的配置如下: &l

Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

spring事务配置的五种方式: 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部

关于spring @Scheduled 定时任务

问题描述 关于spring @Scheduled 定时任务 因为我需要在月底 清空数据 所以我想写一个spring 的定时任务 我在网上找了一个cron的表达式生成器 每个月的最后一天 @Scheduled(cron = "0 0 0 L * ?") 这样写的话后台会异常 For input string: "L" 表达式运行报错 该如何解决 spring版本的问题吗 解决方案 spring中内置了一种定时任务的实现方式,简单到了极点. 只需在xml中配置 当然,还

spring @Scheduled 定时任务,启动服务后,没触发定时任方法,不知什么原因引起

问题描述 spring @Scheduled 定时任务,启动服务后,没触发定时任方法,不知什么原因引起 spring @Scheduled 定时任务,启动服务后,没触发定时任方法,不知什么原因引起,请大家指引 job类如下: package com.yl.reqPos; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.context.annotation.Lazy; impo

详解Java的Spring框架中的注解的用法_java

1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } ... } 配置文件: <bean id="userManagerImpl" class="com.

java框架spring依赖注入的6种方式

spring中如何给对象的属性复制? 1)通过构造方法2)通过set方法给属性注入值3)p命名空间4)自动转配(了解即可,不推荐使用)5)注解6)通过接口 准备工作(模拟业务方法)Action-->service-->dao 1)UserDao:     p<span style="font-family:Courier New;">ublic class UserDao {           public void save(){              

【Spring】定时任务详解实例-@Scheduled

转载请注明出处http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 最近在做项目时间比较紧张也有比较久没写博客了. 现在项目的Redis缓存需要用到定时任务就学习了一下Spring 的@Scheduled注解.使用起来很简单. 这个例子是建立在之前我的一篇博客的实例上面的. 也就是架好了SSM框架. SSM框架博客的链接 [->点击访问上篇博客源码-CHX] 首先当然是在Spring的xml配置文件加入task的命名空间 xmlns:task="

最流行的java后台框架spring quartz定时任务_java

配置quartz 在spring中需要三个jar包: quartz-1.8.5.jar.commons-collections-3.2.1.jar.commons-logging-1.1.jar 首先要配置我们的spring.xml xmlns 多加下面的内容. xmlns:task="http://www.springframework.org/schema/task"  然后xsi:schemaLocation多加下面的内容. http://www.springframework.

SPRING实践总结--参数注解的使用

今天用spring 搭建测试模型过程中发现web接收参数的注解使用方式各有不同,在不同场景下的使用方式总结了一下 @RequestBody 获取POST请求中的参数,请求参数会放到MAP里 @RequestMapping(value = "/doQueryTempReq", method = RequestMethod.POST) public @ResponseBody Map<String, Object> doQueryTempReq(@RequestBody Map