springboot 定时任务

Posted lhblog1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 定时任务相关的知识,希望对你有一定的参考价值。

原文 https://blog.csdn.net/wqh8522/article/details/79224290

1. 使用Timer

public class TestTimer {
    public static void main(String[] args) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("task  run:"+ new Date());
            }
        };
        Timer timer = new Timer();
        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
        timer.schedule(timerTask,10,3000);
    }
}

2.ScheduledExecutorService

public class TestScheduledExecutorService {
    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        // 参数:1、任务体 2、首次执行的延时时间
        //      3、任务执行间隔 4、间隔时间单位
        service.scheduleAtFixedRate(()->System.out.println("task ScheduledExecutorService "+new Date()), 0, 3, TimeUnit.SECONDS);
    }
}

3.多线程执行

@Configuration
//config包中加
@EnableAsync
public class AsyncConfig {
     /*
    此处成员变量应该使用@Value从配置中读取
     */
    private int corePoolSize = 10;
    private int maxPoolSize = 200;
    private int queueCapacity = 10;
    @Bean
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.initialize();
        return executor;
    }
}
然后在定时任务的类或者方法上添加@Async
我们在方法上使用@Scheduled注解来设置任务的执行时间,并且使用三种属性配置方式:
  1. fixedRate:定义一个按一定频率执行的定时任务
  2. fixedDelay:定义一个按一定频率执行的定时任务,与上面不同的是,改属性可以配合initialDelay, 定义该任务延迟执行时间。
  3. cron:通过表达式来配置任务执行时间

整合Quartz

springboot2.0之后的

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

 else

  <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> 

public class TestQuartz extends QuartzJobBean {

  /**

   * 执行定时任务

   * @param jobExecutionContext

   * @throws JobExecutionException

  */

  @Override

  protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

    System.out.println("quartz task "+new Date());

  }

@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(10)

    //设置时间周期单位秒

    .repeatForever();

    return TriggerBuilder.newTrigger().forJob(teatQuartzDetail()) .withIdentity("testQuartz") .withSchedule(scheduleBuilder) .build();

  }

 




以上是关于springboot 定时任务的主要内容,如果未能解决你的问题,请参考以下文章

springboot项目使用SchedulingConfigurer实现多个定时任务

#yyds干货盘点# springboot整合Elastic Job实现分片配置定时任务

SpringBoot定时任务

Springboot 内置定时器的使用

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题