Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解(4)

来源:互联网 发布:百度域名注册服务费用 编辑:程序博客网 时间:2024/05/16 12:21

转自:http://blog.csdn.net/chwshuang/article/details/52209903

目录(?)[+]

Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(4) - Scheduled注解实现任务调度

1. 创建定时调度任务

很多项目都需要通过调度任务去完成一些非交互性的工作,比如定时更新数据库,定时统计上一天的数据等等。在零配置框架中,我们使用@

Scheduled完成定时任务的处理,一个类,一个注释,整个调度器就搞定了。

首先,我们在【task】项目中创建【com.aitongiy.web.task】包



然后创建【CustomTask.Java】

[plain] view plain copy
 print?
  1. import org.slf4j.Logger;  
  2. import org.slf4j.LoggerFactory;  
  3. import org.springframework.scheduling.annotation.Scheduled;  
  4. import org.springframework.stereotype.Component;  
  5.   
  6. /**  
  7.  *  自定义定时任务  
  8.  * Created by admin on 16/8/15.  
  9.  */  
  10. @Component  
  11. public class CustomTask {  
  12.     private static final Logger logger = LoggerFactory.getLogger(CustomTask.class);  
  13.   
  14.   
  15.     /**  
  16.      * 调度任务执行  
  17.      * <pre>  
  18.      *     <table>  
  19.      *      <th>  
  20.      *          <tr> <td>名称</td>  <td>类型</td> <td>单位</td><td>说明</td> </tr>  
  21.      *      </th>  
  22.      *  
  23.      *          <tr> <td>cron</td>  <td>String</td> <td> - </td> <td>cron表达式</td></tr>  
  24.      *          <tr> <td>zone</td> <td>String</td> <td> - </td> <td>时区字符串(一般不需要设置)</td> </tr>  
  25.      *          <tr> <td>fixedDelay</td> <td>long</td> <td>毫秒</td> <td>调度间隔,下一个任务开始时间与上一个任务结束时间间隔[F-S]</td> </tr>  
  26.      *          <tr> <td>fixedDelayString</td> <td>String</td> <td>毫秒</td> <td>调度间隔,下一个任务开始时间与上一个任务结束时间间隔,字符串表示[F-S]</td> </tr>  
  27.      *          <tr> <td>fixedRate</td> <td>long</td> <td>毫秒</td> <td>调度间隔,下一个任务开始时间与上一个任务开始时间间隔[S-S]</td> </tr>  
  28.      *          <tr> <td>fixedRateString</td> <td>String</td> <td>毫秒</td> <td>调度间隔,下一个任务开始时间与上一个任务开始时间间隔,字符串表示[S-S]</td> </tr>  
  29.      *          <tr> <td>initialDelay</td> <td>long</td> <td>毫秒</td> <td>调度器启动延迟时间</td> </tr>  
  30.      *          <tr> <td>initialDelayString</td> <td>String</td> <td>毫秒</td> <td>调度器启动延迟时间,字符串表示</td> </tr>  
  31.      *  
  32.      *     </table>  
  33.      * </pre>  
  34.      */  
  35.     @Scheduled(fixedRate = 1000 * 10,initialDelay = 1000 * 5)  
  36.     private void taskRun(){  
  37.         logger.info("CustomTask run ...");  
  38.     }  
  39. }  


方法上的@Scheduled有几个配置参数,我看通过下面的表查可以了解一下。

 名称类型单位说明cronString-cron表达式zoneString-时区字符串(一般不需要设置)fixedDelaylong毫秒调度间隔,下一个任务开始时间与上一个任务结束时间间隔[F-S]fixedDelayStringString毫秒调度间隔,下一个任务开始时间与上一个任务结束时间间隔,字符串表示[F-S]fixedRatelong毫秒调度间隔,下一个任务开始时间与上一个任务开始时间间隔[S-S]fixedRateStringString毫秒调度间隔,下一个任务开始时间与上一个任务开始时间间隔,字符串表示[S-S]initialDelaylong毫秒调度器启动延迟时间initialDelayStringString毫秒调度器启动延迟时间,字符串表示

2. 添加定时调度配置

然后我们需要在【back】项目的【MvcConfig.java】中的【@ConponentScan】注释中加入【com.aitongyi.web.task】

[plain] view plain copy
 print?
  1. @EnableWebMvc  
  2. @EnableAspectJAutoProxy  
  3. @EnableScheduling  
  4. @ComponentScan(basePackages =   
  5.         {"com.aitongyi.web.back.controller",   
  6.          "com.aitongyi.web.service",  
  7.          "com.aitongyi.web.task"})  
  8. @MapperScan("com.aitongyi.web.dao.mapper")  


添加完成后,我们要在【back】项目的pom.xml文件中添加task任务的依赖,要不然【back】项目中无法扫描到【task】项目中的类

[plain] view plain copy
 print?
  1. <dependencies>  
  2.         <dependency>  
  3.             <groupId>com.aitongyi.web</groupId>  
  4.             <artifactId>dao</artifactId>  
  5.             <version>${project.version}</version>  
  6.         </dependency>  
  7.         <dependency>  
  8.             <groupId>com.aitongyi.web</groupId>  
  9.             <artifactId>bean</artifactId>  
  10.             <version>${project.version}</version>  
  11.         </dependency>  
  12.         <dependency>  
  13.             <groupId>com.aitongyi.web</groupId>  
  14.             <artifactId>service</artifactId>  
  15.             <version>${project.version}</version>  
  16.         </dependency>  
  17.         <dependency>  
  18.             <groupId>com.aitongyi.web</groupId>  
  19.             <artifactId>task</artifactId>  
  20.             <version>${project.version}</version>  
  21.         </dependency>  

添加完成后,我们启动【back】服务,服务启动完成,看看日志,我们就知道它运行起来了,

[plain] view plain copy
 print?
  1. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  
  2. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  
  3. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  
  4. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  
  5. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  
  6. [INFO ][12:25:47] - [com.aitongyi.web.task.CustomTask] - CustomTask run ...  

注解方式的定时任务已经配置完成了,不过我们需要分析一下,这个注解方式的调度任务的优缺点:

优点:配置简单、高效

缺点:定时规则是写死的,无法进行配置,需要更新代码才能更改调度规则。

如果你的调度规则经常变化,就只能用XML的方式或者编程的方式手动处理,xml的方式是调度规则可灵活配置,代码中控制的方式是可以通过数据库,web的方式实现在线查看运行状态的处理,更灵活。

后期我会提供代码方式的示例。今天就暂时写到这里。



目录

        (一)基本介绍    
        (二)基础框架搭建
        (三)实现最基本的登录处理        
        (四)任务调度管理   
        (五)Redis缓存配置
        (六)安全框架集成

        (七) git版本源代码下载


阅读全文
0 0