定时任务

我知道的实现定时任务功能的方式目前有以下几种
方式一:使用java.util下的Timer和TimerTask,单线程。
入门demo:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
   @Override
   public void run() {
       System.out.println("hello");
   }
},10000,1000);        
方式二:使用Executors.newScheduledThreadPool(5),可多线程。
入门demo:
ScheduledExecutorService service = Executors.newScheduledThreadPool(5);
service.scheduleAtFixedRate(()->{
    System.out.println(Thread.currentThread().getName());
},10,2, TimeUnit.SECONDS);
service.scheduleAtFixedRate(()->{
    System.out.println(Thread.currentThread().getName());
},10,2, TimeUnit.SECONDS);
service.scheduleAtFixedRate(()->{
    System.out.println(Thread.currentThread().getName());
},10,2, TimeUnit.SECONDS);    
方式三:使用Spring-Task,不支持集群。
入门demo(xml方式):
  步骤一:写一个执行任务的类:
package com.hello.jianwu;
import org.springframework.stereotype.Component;
@Component
public class TaskOne {
public void job(){
System.out.println("hello");
}
}

  步骤二:在applicationContext.xml中配置

<context:component-scan base-package="com.qukan.jianwu" />
<task:scheduled-tasks>
   <task:scheduled ref="taskOne" method="job" cron="0/5 * * * * ? "/>
</task:scheduled-tasks>

入门demo(注解方式):

步骤一:写一个执行任务的类:
package com.hello.jianwu;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class TaskOne {
    @Scheduled(cron = "0/5 * * * * ?")
    public void job() {
        System.out.println("hello");
    }
}

  步骤二:在applicationContext.xml中配置

<context:component-scan base-package="com.qukan.jianwu" />
<task:annotation-driven />
方式四:使用spring的@scheduled注解,不支持集群,当在多台机器上运行时,需要自己使用数据库或redis等加锁的方式控制只能一台机器运行。
参考:SpringBoot定时任务@Scheduled注解详解 - 郭慕荣 - 博客园 (cnblogs.com)


方式五:使用Quartz,支持集群。
posted @ 2018-08-15 11:11  ENU  阅读(187)  评论(0)    收藏  举报