springboot指定时间触发定时任务

简介: springboot指定时间触发定时任务

新建测试Demo类执行定时任务

package com.task.zhixingshijian;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
import java.util.*;
/**
 * @author wuzhenyong
 * ClassName:TaskDemo.java
 * date:2022-09-28 09:44
 * Description:
 */
public class TaskDemo {
  /**
   * 指定时间执行一次定时任务
   *
   * @param localDateTime 触发时机
   * @param timing        参数信息
   */
  public void timing(LocalDateTime localDateTime, Map<String, String> timing) {
    Calendar calendar = Calendar.getInstance();
    // 年份
    calendar.set(Calendar.YEAR, localDateTime.get(ChronoField.YEAR));
    // 月份 传入日期需要-1
    calendar.set(Calendar.MONTH, localDateTime.get(ChronoField.MONTH_OF_YEAR)-1);
    // 天数
    calendar.set(Calendar.DAY_OF_MONTH, localDateTime.get(ChronoField.DAY_OF_MONTH));
    // 小时
    calendar.set(Calendar.HOUR_OF_DAY, localDateTime.get(ChronoField.HOUR_OF_DAY));
    // 分钟
    calendar.set(Calendar.MINUTE, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
    // 秒
    calendar.set(Calendar.SECOND, localDateTime.get(ChronoField.SECOND_OF_MINUTE));
    Date time = calendar.getTime();
    Timer timer = new Timer();
    // 执行
    timer.schedule(new TimerTask() {
      @Override
      public void run() {
        System.out.println("执行了指定执行时间任务,localDateTime:" + LocalDateTime.now());
        System.out.println("执行内容:" + timing.toString());
      }
    }, time);
  }
}

创建项目启动后进行配置具体时间执行定时类

注意:此类只是测试一下,如果项目中是不需要此类的

package com.task.zhixingshijian;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
/**
 * @author wuzhenyong
 * ClassName:TaskCommandLineRunner.java
 * date:2022-09-28 09:43
 * Description:
 */
@Component
public class TaskCommandLineRunner implements org.springframework.boot.CommandLineRunner {
  /**
   * 启动项目后运行
   *
   * @param args arg游
   */
  @Override
  public void run(String... args) {
    // 指定触发的时间1
    LocalDateTime localDateTime1 = LocalDateTime.of(2022, 9, 28, 10, 14, 00);
    Map<String, String> timing1 = new HashMap<>();
    timing1.put("name", "timing1");
    new TaskDemo().timing(localDateTime1, timing1);
    // 指定触发的时间2
    LocalDateTime localDateTime2 = LocalDateTime.of(2022, 9, 28, 10, 13, 00);
    Map<String, String> timing2 = new HashMap<>();
    timing2.put("name", "timing2");
    new TaskDemo().timing(localDateTime2, timing2);
    // 指定触发的时间3
    LocalDateTime localDateTime3 = LocalDateTime.of(2022, 9, 28, 10, 15, 00);
    Map<String, String> timing3 = new HashMap<>();
    timing3.put("name", "timing3");
    new TaskDemo().timing(localDateTime3, timing3);
  }
}

运行效果

716bd92915fe4b83b7ea0d8a97fe1eec.png

相关文章
|
6月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
613 0
|
4月前
|
XML Java Linux
Spring Task 定时任务没有定时执行是为什么?
Spring Task 定时任务没有定时执行是为什么?
68 2
|
6月前
|
Java BI 调度
Springboot项目中定时任务的四种实现方式
Springboot项目中定时任务的四种实现方式
259 4
|
Java 调度
Springboot 使用Quartz定时器执行多个定时任务 配置篇
Springboot 使用Quartz定时器执行多个定时任务 配置篇
778 0
Springboot 使用Quartz定时器执行多个定时任务 配置篇
|
存储 数据可视化 Java
SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来
前言 传统定时器是硬编码。但是有的时候业务上需要不断地调整 问题描述 我们开发了一个定闹钟的功能。这个功能肯定是定时器开发。但是这就存在一个问题这个定时是动态的。那么我们如何实现呢?请接着看
|
Java
Springboot中实现手动启动和暂停任务的功能
Springboot中实现手动启动和暂停任务的功能
423 0
|
Java 调度 开发者
SpringBoot中的定时任务的同步与异步你确定真的知道?
定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务调度方式的优缺点,以便为日后选择的时候提供一定的参考。
|
NoSQL Java Redis
springboot的定时任务的方法周期比方法的运行时间长
springboot的定时任务的方法周期比方法的运行时间长
163 0
springboot的定时任务的方法周期比方法的运行时间长
|
Java Linux 调度
springboot整合quarzt实现动态定时任务
springboot整合quarzt实现动态定时任务
262 0
springboot整合quarzt实现动态定时任务
|
NoSQL Java 调度
SpringBoot定时任务功能详细解析
SpringBoot定时任务功能详细解析
下一篇
无影云桌面