使用Spring Task开发定时任务
一、定时任务概述
在项目中开发定时任务应该一种比较常见的需求了,在Java中开发定时任务主要有三种解决方案:1 使用JDK自带的Timer 2 使用第三方组件Quartz 3 使用Spring Task。Timer是JDK自带的定时任务工具,其简单易用,但是对于复杂的定时规则无法满足在实际项目开发中也很少使用到,Quartz功能强大但是使用起来相对笨重,而Spring Task则具备前两者的优点(功能强大且简单易用),在这篇博客中我将介绍如何使用Spring Task进行定时任务开发。
二、使用Spring Task实现定时任
Spring Task开发定时任务有两种任务配置方式:1 XML配置 2 注解配置。我将绍如何使用XML进行任务配置再介绍如何使用注解配置。
使用XML配置方式开发定时任务
创建Maven WEB项目
打开Eclipse创建maven WEB项目将开发所需要的jar的坐标配置在pom中。以下是我项目中的POM文件。
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.8.RELEASE</version> </dependency> </dependencies>
2 在webapp文件中创建WEB-INF并在该文件夹下添加web.xml文件,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_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>springTask</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
3 在项目src目录下创建任务Service以及对应的实现类,代码对应如下:
public interface TaskService { public void taskOne(); public void taskTwo(); }
public class TaskServiceImpl implements TaskService { @Override public void taskOne() { System.out.println("这是我的第一个定时任务"+new Date()); } @Override public void taskTwo() { System.out.println("这是我的第二个定时任务"+new Date()); } }
4 在maven项目的resource目录下配置定时任务
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.3.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> <bean id="taskService" class="com.wistronits.service.impl.TaskServiceImpl"></bean> <!-- 配置定时规则 --> <task:scheduled-tasks> <!-- 表示在服务器启动一秒后执行任务1 并且每隔1秒钟执行一次--> <task:scheduled ref="taskService" method="taskOne" initial-delay="1000" fixed-delay="1000" /> <!-- 表示在每天的13:40分0秒执行该任务-> <task:scheduled ref="taskService" method="taskTwo" cron="0 40 13 * * ?"/> </task:scheduled-tasks> </beans>
5 执行结果如下截图所示:
使用注解方式开发定时任务
使用注解方式开发定时任务与xml大体相同,不同于xml的差别如下:
1 在xml不在配置Spring管理的bean,而是配置Spring的包的扫描路径以及启用定时任务注解。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.3.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> <context:component-scan base-package="com.wistronits.service"></context:component-scan> <task:annotation-driven/> </beans>
2 在需要进行定时任务的方法上中增加定时任务注解
@Service public class TaskServiceImpl implements TaskService { @Override//表示服务器启动两秒后启动该任务每隔一秒钟执行一次 @Scheduled(initialDelay=2000,fixedDelay=1000) public void taskOne() { System.out.println("这是我的第一个定时任务"+new Date()); } @Override @Scheduled(cron="*/5 * * * * ?")//每隔五秒钟执行一次 public void taskTwo() { System.out.println("这是我的第二个定时任务"+new Date()); } }
其他部分与xml配置相同,关于SpringTask开发定时任务就介绍到这里。
共同学习,写下你的评论
评论加载中...
作者其他优质文章