原来创建定时任务如此简单,我一直以为很复杂

点击上面↑「爱开发」关注我们

每晚10点,捕获技术思考和创业资源洞察

当你想要放弃的那一刻,想想当初为什么坚持走到了这里

客户有个需求,需要定时同步销售人员资料,刚开始打算用mysql定时任务实现,发现效果不太理想,于是选择用spring boot 中的定时创建任务来实现。关于SpringBoot创建定时任务很简单,一般有4种,下面我们一起来了解下:

  1. Timer:这是java自带的java.util.Timer类,这个类允许我们调度一个java.util.TimerTask任务。可以让我们的程序按照某一个频度执行,不足之处是不能在指定时间运行。一般用的比较少。

  2. ScheduledExecutorService:也是jdk自带的类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,任务是并发执行,互不影响。

  3. Spring Task:是Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz。

  4. Quartz:这是一个功能比较强大的的调度器,可以让我们的程序在指定时间执行,也可以按照某一个频度执行,只不过配置起来稍微有点复杂。

 

Timer

public class TaskTimer {
  public static void main(String[] args) {
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            System.out.println("任务启动"+ new Date());
        }
    };
    Timer timer = new Timer();
    //每10秒执行一次
    timer.schedule(timerTask,10,10000);
   }
 }

对于ScheduledExecutorService和Spring Task不多谈。哪个配置比较麻烦,我们就来尝试哪种,重点来看一下Quartz实现定时任务。

Quartz

第一,我们在pom文件中添加依赖,如果SpringBoot版本是2.0.0以后的,则在spring-boot-starter中已经包含了quart的依赖,则可以直接使用spring-boot-starter-quartz依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

要是1.5.9则要使用以下添加依赖:

  <dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz</artifactId>
     <version>2.3.0</version>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
     <artifactId>spring-context-support</artifactId>
   </dependency>

接下来,我们创建任务类TestQuartz,主要继承了QuartzJobBean

   public class TestQuartz extends QuartzJobBean {
    /**
     * 执行定时任务
     *
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    protected void executeInternal(JobExecutionContext 
       jobExecutionContext) throws JobExecutionException {
    System.out.println("洪生鹏 quartz task " + new Date());
   }
 }

创建配置类QuartzConfig

    @Configuration
    public class QuartzConfig {
     @Bean
     public JobDetail teatQuartzDetail() {
        return JobBuilder.newJob(TestQuartz.class).
           withIdentity("testQuartz").
           storeDurably().build();
    }

    @Bean
     public Trigger testQuartzTrigger() {
       SimpleScheduleBuilder scheduleBuilder =   SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInSeconds(2)  //设置时间周期单位秒 每隔两秒实行一次
            .repeatForever();
    return TriggerBuilder.newTrigger().forJob(teatQuartzDetail())
            .withIdentity("testQuartz")
            .withSchedule(scheduleBuilder)
            .build();
     } 
  }

Run项目,我们可以看到控制台打印出如下信息:

640?wx_fmt=png

至此关于定时任务,我们就创建完成了。

以上简单地介绍了关于SpringBoot定时任务的处理,更多功能还需摸索。

如果你觉得本文还可以,点个在看就是最好的支持。

【END】

你可能还喜欢

真的醉了,我都工作3年了,还要我做笔试题

连Serializable都不知道是什么,你这5年都干些什么了?

640?wx_fmt=jpeg

每晚10点,捕获技术思考和创业资源洞察

更多精彩内容,请长按识别关注

喜欢本文,点个[在看],分享给朋友640?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值