boot定时任务开启和关闭 spring_springBoot自带定时任务schedule用法详解

定时任务不管哪个项目或多或少都会有用到,那定时任务可以用来干嘛?

定时任务的作用相信很多码友都知道,这里就简单介绍一下,spring项目启动后想对一些数据做同步,一些表数据要不定时统计,一些业务报表的汇总和生成,大量数据导入后台处理,一般都是用定时任务去处理,对于太占资源的任务需要后台处理,越复杂的系统定时任务也越多,需要监控的东西也很多。

springBoot也提供了简单的定时任务支持,文章中的代码也是接着上一次的项目来讲,也可以自己创建一个新项目,因为着节的内容没有很多复杂的配置。

1、创建定时任务业务实现类

在service创建一个ScheduleServiceImpl类

package com.apgblogs.springbootstudy.service;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.scheduling.annotation.Async;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Service;

/**

* @author xiaomianyang

* @description

* @date 2019-07-14 10:19

*/

@Service

public class ScheduleServiceImpl {

private Logger logger= LoggerFactory.getLogger(ScheduleServiceImpl.class);

int count1 = 1;

int count2 = 1;

int count3 = 1;

@Scheduled(fixedRate = 1000)

@Async

public void jobFixedRate(){

Thread.currentThread().setName("间隔执行");

logger.info("{}.执行第{}次",Thread.currentThread().getName(),count1++);

}

@Scheduled(fixedRateString = "${job.fixedRate}")

@Async

public void jobFixedRateString(){

Thread.currentThread().setName("spel表达式间隔执行");

logger.info("{}.执行第{}次",Thread.currentThread().getName(),count2++);

}

@Scheduled(fixedDelay = 3000)

@Async

public void jobFixedDelay() throws InterruptedException{

Thread.sleep(1000);

Thread.currentThread().setName("上次任务完成后间隔执行");

logger.info("{}.执行第{}次",Thread.currentThread().getName(),count3++);

}

@Scheduled(initialDelay = 8000,fixedRate = 1000)

@Async

public void jobInitialDelay(){

Thread.currentThread().setName("spring容器完成后间隔执行");

logger.info("{}.执行第{}次",Thread.currentThread().getName(),count3++);

}

@Scheduled(cron = "0 * 11 * * ?")

@Async

public void jobCron(){

Thread.currentThread().setName("cron表达式执行");

logger.info("{}.执行第{}次",Thread.currentThread().getName(),count3++);

}

}

2、在启动类上添加启用调度注解

在启动类加上@EnableScheduling注解,我这里其他注解因为集成其他功能,如果是新项目就不用加了

package com.apgblogs.springbootstudy;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication

@EnableJpaAuditing

@MapperScan("com.apgblogs.springbootstudy.dao")

@EnableCaching

@EnableScheduling

public class SpringBootStudyApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootStudyApplication.class, args);

}

}

3、启动并测试定时任务的执行情况

可以看到输出的日志,说明定时任务就起作用了

4、cron表达式一些常用格式

cron表达式是很强大的,对于各种复杂的定时计划都能表示,比如每年的那个月那一天那个时间范围内每隔多少秒去执行,cron表达式都可以表示出来,下面是一些常用的时间格式

5、文章源码地址

现在定时任务就已经可以使用了,如果项目中有这种需求的就可以这样来处理了,但是有个问题,上面的需求只能满足固定的时间,那假如用户想自定义任务执行时间呢,或者用户想手动执行呢,这个springBoot的schedule就很难满足需求了,这时候就会用到比较强大的quartz,这个第三方任务调度插件可以完成各种复杂需求,记得关注我哦,下一篇文章就会详细讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值