spring定时任务cron为每季度第一个工作日转换为cron表达式
最近系统有个需求,执行一个定时任务发送待办事项,一年有六次,分别为每季度第一个工作日、第二季度和第四季度结束后的第十个工作日,可头疼坏了
还好我们系统有个工作日表,于是思路就是先查询出每季度的第一天,然后在表里查出大于此日期的第一个工作日,然后利用cronUtil转换成cron表达式,开启定时任务就ok了。
下面附上查询季度第一天的sql
/* 本季度的第一天 */
concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)
/* 下个季度的第一天 */
date_add(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM curdate()),1) + interval QUARTER(curdate())*3-1 month),interval 1 day )
/* 本半年度的第一天 我的需求是这样,你们可以自由变动*/
concat(year(curdate()),'-07-01')
/* 明年半年度的第一天 */
concat(year(date_add(curdate(),interval 1 year )),'-07-01')
/* 查询本季度第一个工作日 需要先有个工作日表哈*/
select 日期from 工作日表where 日期>=concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1) and 是否为工作日=1 limit 1
查询出来的日期通过cronUtil转换成cron表达式,下面附上cronUtil
package com.ncamc.sfa.schedule.util;import java.text.SimpleDateFormat;
import java.util.Date;/**** 功能描述:日期转换cron表达式*/
public class CronUtil {/**** 功能描述:日期转换cron表达式* @param date* @param dateFormat* @return*/public static String formatDateByPattern(Date date, String dateFormat){SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);String formatTimeStr = null;if (date != null) {formatTimeStr = sdf.format(date);}return formatTimeStr;}/**** @param date : 时间点* @return*/public static String getCron(Date date){String dateFormat="ss mm HH dd MM ?";return formatDateByPattern(date, dateFormat);}
}
注意:spring的scheduled的cron不能有年份,如果需要年份,需要合并quartz来实现了
由于我的需求是每个季度的第一个工作日,有可能今年跟下一年的季度第一个工作日是不一样的,所以定时任务也不能写死,这就需要在每次定时任务执行的时候,要修改此任务的cron,也就是获取相应任务的线程id,先停止任务,然后放入新的cron重新启动任务,可以参考我写的上一篇文章。
可参考这个:
https://blog.csdn.net/success321/article/details/116985433
spring定时任务cron为每季度第一个工作日转换为cron表达式相关推荐
- Spring定时任务@Scheduled注解使用方式浅窥(cron表达式、fixedRate和fixedDelay)
1.开篇 spring的@Scheduled定时任务相信大家都是十分熟悉.最近在使用过程中发现了一些问题,写篇文章,和大家分享一下.结论在最后,不想看冗长过程的小伙伴可以直接拉到最后看结论. 2.简单 ...
- Spring定时任务(Cron表达式)
定时任务 在线Cron表达式生成器: https://cron.qqe2.com/ 一.SpringBoot自带的定时任务 解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能 定时任务 1.@ ...
- spring定时任务 时间配置cron表达式
1.Spring quartz 1.1 单纯针对时间的设置规则 org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时 ...
- Spring定时任务@Scheduled注解使用配置方式(cron表达式、fixedRate和fixedDelay)
Spring定时任务@Scheduled注解使用配置方式(cron表达式.fixedRate和fixedDelay) 序言: 个人推荐一个很方便的在线Cron生成器(网页版):https://qqe2 ...
- Quartz动态改变Cron表达式,来实现动态执行Spring定时任务
Quartz定时器非常强大,但是有时候我们想要不重就能动态的改变Cron表达式的值. 这样我们可以在配置文件中(当然数据库也可以)配置一个表达式的值. 每次想改变表达式的值的时候手动修改配置文件中的表 ...
- Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
@Scheduled 由Spring定义,用于将方法设置为调度任务,可实现方法的周期或定时执行.想单独使用Scheduling,需引入spring-context这个依赖.spring-boot-st ...
- Spring定时任务的几种实现
Spring定时任务的几种实现 spring框架 quartz spring spring-task 定时任务 注解 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信 ...
- (转)Spring定时任务的几种实现
Spring定时任务的几种实现 博客分类: spring框架 quartzspringspring-task定时任务注解 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要 ...
- Spring定时任务@scheduled多线程的使用(@Async注解)
1.开篇 在Spring定时任务@Scheduled注解使用方式浅窥这篇文章里面提及过,spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢? ...
最新文章
- Vue-CLI + Webpack 搭建 Vue 项目最全分析
- python 堆排序的两种实现
- python扑克牌洗牌_python:面向对象基本知识(二)用类方法实现斗地主洗牌发牌...
- 模态对话框与非模态对话的几种销毁方法与区别
- 【期外】 (一)关于LSH :局部敏感哈希算法
- 操作系统内存分配算法_操作系统基础45-伙伴系统和slab内存分配
- 硬件反垃圾邮件网关|反垃圾邮件软件产品|反垃圾邮箱邮件系统
- 华为鸿蒙5g售价,华为首款5G手机售价公布,余承东透露鸿蒙将用于连接家庭设备...
- 单独学java_自学Java的几大误区是什么
- excel使用教程_如何系统地学习Excel?
- Docker环境调优
- creo数控编程怎么样_CREO 3.0中文版数控加工高手必备118招
- Greasy Fork 视频网页全屏脚本
- Elasticsearch实现内容精确匹配查询
- 字节面试杂谈——操作系统
- docker(五):更新容器映射端口
- 求和:1/3+3/5+5/7+7/9+………..+97/99
- 计蒜客 - 蒜头君的任务
- 阿里云高级工程师认证证书终于到手了!
- python版电报API接入从零到一(有彩蛋)