需求:
每天的早上7点定时扫描表里的数据,符合条件的数据将会被发送到相应人员的邮箱当中。
分析:
实现定时任务技术上有好多选择:
1· Java自带的java.util.Timer类:这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
2.使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
3.Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,本篇博客主要介绍这种方案。
本文介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包。
另外,springtask支持注解和配置文件两种方式。这里以配置文件方式示例。
步骤:第一步:配置spring配置文件:
首先,命名空间需要添加有关内容:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
。。。。。。
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
其次,配置文件中设置具体的任务:
<task:scheduled-tasks>
<task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>
<!--<task:scheduled ref="taskJob" method="job1" cron="0 0 7 * * ?"/>-->
</task:scheduled-tasks>
说明:ref参数指定的即任务类,method指定的即需要运行的方法,croncr即onExpression表达式,具体写法这里不介绍了,详情见附录。<context:component-scan base-package="com.gy.mytask" />。
第二步:编写需要执行任务的类:
package com.bms.service;/**
* Created by 贾丽敏 on 2017/5/22.
*/
import com.bms.mapper.TbOrderMapper;
import com.bms.pojo.TbOrderEmail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
*
* @author
* @create 2017-05-22 20:11
**/
@Service
public class TaskJob {
@Autowired
private TbOrderMapper tbOrderMapper;
@Autowired
private SendMail sendMail;
public void job1(){
try {
List<TbOrderEmail> orderEmailList =getOrderEmail();//封装的具体执行任务的代码
for (TbOrderEmail orderEmail:orderEmailList){
sendMail.sendMail(orderEmail);
}
System.out.println("发送邮件成功");
}catch (Exception e){
e.printStackTrace();
}
}
}
大致内容就这么多,还有一种注解方式,原理一样,大家也可以尝试一下。