Spring 定时任务 比较

1.spring 注解类的配置:

   
    
    
    

2.实体类 :

package com.jmp.quarz;

import com.jmp.comm.Utils.JsonUtil;
import com.jmp.service.UserService;
import com.jmp.sql.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Random;


/**
 * spring task的特点:
         1. 默认单线程同步执行
         2. 一个任务执行完上一次之后,才会执行下一次调度
         3. 多任务之间按顺序执行,一个任务执行完成之后才会执行另一个任务
         4. 多任务并行执行需要设置线程池
         5. 全程可以通过注解配置
 */

@Component
@Slf4j
public class MySpringTaskQuarzJobs {

    @Resource
    UserService userService;

    /**
     * 定时任务方法:
     *      不一样的线程进行操作的
     *      注解式的任务,在时间延迟的时候,大于相间隔的时间进行操作的,也会执行完再执行下一个操作
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    public void run(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("run obj info : ",this.hashCode());
        log.info("MyQuarzJobs job");
    }


    /**
     * 注解式的定时任务操作:
     *     当发生异常时,任务在相应的间隔时间进行执行
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    public void runError(){
        try {
            Thread.sleep(7000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Random rand = new Random();
        int num = rand.nextInt();
        if (num % 3 == 0) {
            num = 9 / 0;
        }
        log.info("runError obj info : ",this.hashCode());
        log.info("runError job");
    }


    /**
     * 可以调用相应的服务类内容
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    public void runService(){
        log.info("--------> runService method <---------------");
        List list = userService.getUserList();
        log.info(" json data :  {}", JsonUtil.toJson(list));
        log.info("--------> runService code : {}",this.hashCode());
        log.info("runService end");
    }



}

 

 

2.Quarz配置文件的配置方式:

quarz.xml:



    
    

    
    
     
    
    
        
        
        
    
    
        
        
        
    
    
        
        
        
    

    
    
        
        
        
    
    
        
        
        
    
    
        
        
        
    

    
    
        
            
                
                
                
            
        
    




 引入到spring配置文件中(application.xml中):

 

实体类内容:

package com.jmp.quarz;


import com.jmp.comm.Utils.JsonUtil;
import com.jmp.service.UserService;
import com.jmp.sql.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Random;

/**
 Spring Quartz 特点:【按照配置文件时间表达式:准时准点(不延时的时候)】  ---> 配置到spring application.xml上
     1. 默认多线程异步执行
     2. 一个任务在上一次调度未完成执行,下一次调度时间到时,会另起一个线程开始新的调度。在业务繁忙时,一个任务或许会有多个线程在执行,导致数据处理异常。
     3. 单任务同步:配置属性,可以使一个任务的一次调度在未完成时,而不会开启下一次调度
     4. 多个任务同时运行,任务之间没有直接的影响,多任务执行的快慢取决于CPU的性能

     一个类对应不一样的job方法并可以定义为不一样的job task任务 [看配置文件内容]

 */
@Component
@Slf4j
public class QuarzJobs {

    @Resource
    UserService userService;

    /**
    * Quarz 运行方法 :  No.1方法
    * 执行的对象是否一致  :  执行的对象是一致的
    */
    public void runOne() {
        log.info("--------> runOne method : {}",this.hashCode());
        log.info("runOne end");
    }


    /**
     * Quarz 运行方法 :  No.2方法
     * 故这个方法没有执行到  :  可以调用相应的service类内容
     */
    public void runTwo() {
        log.info("--------> runTwo method <---------------");
        List list = userService.getUserList();
        log.info(" json data :  {}", JsonUtil.toJson(list));
        log.info("--------> runTwo code : {}",this.hashCode());
        log.info("runTwo end");
    }


    /**
     * Quarz 运行方法 :  No.3方法
     * 当执行error方法时 是否会继续执行任务内容
     * 发生异常的时候则继续执行相应的任务的内容
     */
    public void runThree() {
        log.info("--------> runThree method <---------------");
        Random rand = new Random();
        int num = rand.nextInt();
        if (num % 3 == 0) {
            num = 9 / 0;
        }
        log.info("--------> runThree code : {}",this.hashCode());
        log.info("runThree end");
    }


}

 

你可能感兴趣的:(spring,quartz)