SpringTask定时任务示例

一、什么是定时任务:
  • 定时任务是指调度程序在指定的时间或周期触发执行的任务
  • 使用场景:发送邮件、统计、状态修改、消息推送、活动开启、增量索引
二、定时任务实现技术:
  1. Java自带的java.util.Timer 类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指
    定时间运行。使用较少。
  2. Spring3.0以后自主开发的定时任务工具spring task,使用简单,支持线程池,可以高效处理许多不同的定时任务,除spring相关的包外不需要额
    外的包,支持注解和配置文件两种形式。 不能处理过于复杂的任务
  3. 专业的定时框架quartz,功能强大,可以让你的程序在指定时间执行,也可以按照某一个频度执行,支持数据库、监听器、插件、集群
三、示例
  1. Timer 单线程
/**
* java timer 测试类
* Created by gaozhy on 2017/6/24.
*/
public class JavaTimer {
	public static void main(String[] args) {
		try {
			// 创建定时器
			Timer timer = new Timer();
			// 添加调度任务
			// 安排指定的任务在指定的时间开始进行重复的 固定延迟执行
			timer.schedule(new MyTask(),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-06-24 22:31:10"),10*1000);
			// 安排指定的任务在指定的延迟后开始进行重复的 固定速率执行
			//timer.scheduleAtFixedRate(new MyTask(),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-06-24 22:31:10"),10*1000);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}
-------------------------------------------------
/*** 任务类* Created by gaozhy on 2017/6/24.*/
public class MyTask extends TimerTask{
	// 定义调度任务
	public void run() {
		System.out.println("log2:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
	}
}
  1. Spring Task 4个标签+1个注解
  • 基于配置
/**
* Spring Task 任务类
* Created by gaozhy on 2017/6/24.
*/
public class SpringTask {
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void m1(){
System.out.println("m1:"+simpleDateFormat.format(new Date()));
}
public void m2(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
public void m3(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
}
<!--spring-task.xml配置-->
<bean id="springTask" class="com.baizhi.task.SpringTask"></bean>
<!--注册调度任务-->
<task:scheduled-tasks>
<!--延迟8秒 执行任务-->
<!--<task:scheduled ref="springTask" method="m1" fixed-delay="8000" />-->
<!--固定速度5秒 执行任务-->
<!--<task:scheduled ref="springTask" method="m2" fixed-rate="5000"/>-->
<!--
使用cron表达式 指定触发时间
spring task 只支持6位的cron表达式 秒 分 时 日 月 星期
-->
<task:scheduled ref="springTask" method="m3" cron="50-59 * * ? * *"/>
</task:scheduled-tasks>
<!--执行器配置-->
<task:executor id="threadPoolTaskExecutor" pool-size="10" keep-alive="5"></task:executor>
<!--调度器配置-->
<task:scheduler id="threadPoolTaskScheduler" pool-size="10"></task:scheduler>

  • 基于注解
/**
* Spring Task 任务类
* Created by gaozhy on 2017/6/24.
*/
public class SpringAnnotationTask {
	private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/* @Scheduled(fixedDelay = 8000)
	public void m1(){
	System.out.println("m1:"+simpleDateFormat.format(new Date()));
	}
	@Scheduled(fixedRateString = "5000")
	public void m2(){
	System.out.println("m2:"+simpleDateFormat.format(new Date()));
	}
	*/
	@Scheduled(cron = "0-30 * * * * ?")
	public void m3(){
	System.out.println("m2:"+simpleDateFormat.format(new Date()));
	}
}
<!--开启基于注解的spring task-->
<task:annotation-driven></task:annotation-driven>
<bean id="springAnnotationTask" class="com.baizhi.task.SpringAnnotationTask"></bean>

猜你喜欢

转载自blog.csdn.net/qq_42806727/article/details/89348812