定时任务(Quartz和springTask)

一,Quartz

Quartz既可以单独使用也可以跟spring框架整合使用。

Quartz和spring整合:

1.在pom.xml中导入坐标:(quartz相关坐标)

 
	org.quartz-scheduler 
	quartz 
	2.2.1 
 
 
	org.quartz-scheduler 
	quartz-jobs 
	2.2.1
 

2.在spring-jobs配置文件中:




    

    
    
           
            
    

    
    
        
        
    

    
    
        
            
                
            
        
    

3.定时任务的类:

@Component
public class JobDemo {
    public void run(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(new Date());
        System.out.println(format);
    }
}

4.测试代码:

public class QuartzTest {
    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("spring-jobs.xml");
    }
}

5.测试结果:
定时任务(Quartz和springTask)_第1张图片

二,SpringTask

spring内置的定时任务调度。只要有spring的环境,不需要导入其他jar包。

1.在spring-task.xml配置文件




 
 

2.定时任务的类

@Component
public class Demo {
    @Scheduled(cron = "0/5 * * * * ?")      //每隔5秒执行一次
    public void run(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(new Date());
        System.out.println(format);
    }
}

3.测试

public class SpringTaskTest {
    public static void main(String[] args) {
         //加载task的配置文件
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring-task.xml");
    }
}

4.测试结果:
定时任务(Quartz和springTask)_第2张图片

Quartz和springTask的区别:

springTask:默认是单线程同步执行的。只有当一个任务执行完成后,才会执行下一个任务。
Quartz:默认是多线程异步执行的。当一个任务正在执行中,另一个任务时间到了,会再开启一个线程去执行这个任务。

总结:
​ 对于简单的功能,SpringTask和Quartz都能实现需求,但建议使用SpringTask,这个使用起来比Quartz简单许多。
​ Quartz(是一个重量级的工具)的功能要比SpringTask相对来更强大些。

关于cron表达式

cron表达式分为七个域,之间使用空格分隔。其中最后一个域(年)可以为空。

秒 分 时 日 月 星期 [年]

? :占位符,没有任何意义。日和星期必须有且只能有一个设置成?号

* :任意值,在取值范围中的所有值

,: 1,2,3 获取指定的值中的任何一个值(指或者的关系)

- : 5-10 从第5秒到第10秒这个范围内容,都执行。(指一个范围)

/ : num1/num2 从num1开始,每隔num2就会执行一次。(0/5 指每隔5秒执行一次)

你可能感兴趣的:(定时任务(Quartz和springTask))