e2

滴滴侠,fai抖

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

使用Quartz组件完成定时调度特别麻烦,一定要换成Spring Task

定义一个任务的执行类

package zzu.mzy.util ;
import java.text.SimpleDateFormat;
public class MyTaskA { //不需要去继承任何的父类
    public void runJob() {
        System.out.println("当前日期时间" + new SimpleDateFormat("yyyy-MM-dd
        HH:mm:ss.SSS").format(new java.util.Date()));
    }
}

用Spring Task完成一般有两种形式:
1、xml文件配置
2、注解配置

1.基于配置文件:

修改applicationContext.xml文件

需要追加task处理的命名空间定义

xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd

此时已提供好了该文件的原始文件Schema,将其配置到XML编译环境之中,随后进行task操作的配置,首先配置间隔触发

<bean id="myTask" class="zzu.mzy.util.MyTaskA"/>
<task:scheduled-tasks> <!-- 需要配置要执行的作业内容 -->
<task:scheduled ref="myTask" method="runJob" fixed-rate="2000"/>
</task:scheduled-tasks>

使用Cron定时触发

<bean id="myTask" class="zzu.mzy.util.MyTaskA"/>
<task:scheduled-tasks> <!-- 需要配置要执行的作业内容 -->
<!--
<task:scheduled ref="myTask" method="runJob" fixed-rate="2000"/>
-->
<task:scheduled ref="myTask" method="runJob" cron="* * * * * ?"/>
</task:scheduled-tasks>

2.基于Annotation:

修改applicationContext.xml

<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<task:annotation-driven/>
<context:annotation-config/>
<context:component-scan base-package="zzu.mzy"/>
</beans>

配置间隔触发

package zzu.mzy.util;
import java.text.SimpleDateFormat;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component // 标记出这是一个交由Spring管理的JavaBean类
public class MyTaskB { // 不继承任何的父类
@Scheduled(cron="* * * * * ?") // 设置为每秒一触发
    public void runJob() {
        System.out.println("【MyTaskB - 当前日期时间】" + new SimpleDateFormat("yyyy-MM-dd
        HH:mm:ss.SSS").format(new java.util.Date()));
    }
}

当然,如果有多个定时任务,为避免差错,一定不能让他们顺序执行,最好是

建立一个调度池

使所有的任务不再是单线程的形式完成,而是多线程

<task:annotation-driven/>
<!-- 定义了一个任务调度池,这个池可以同时并行执行20个任务 -->
<task:scheduler id="schedulerPool" pool-size="20"/>

这样,基于Spring Task + Cron实现的任务调度就完成了,Spring对于定时任务的处理支持要比原始的QuartZ组件更加方便,但还是有很多人愿意用QuartZ,真的搞不懂唉

posted on 2017-02-19 19:04  纯黑Se丶  阅读(198)  评论(0编辑  收藏  举报