首页 > 其他分享 >定时任务与分布式任务

定时任务与分布式任务

时间:2023-01-31 12:22:47浏览次数:54  
标签:10 15 Fire 任务 every 定时 day 分布式

一、定时任务

1、cron 表达式

语法: 秒 分 时 日 月 周 年(Spring 不支持年)
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html

特殊字符:
,: 枚举;
(cron="7,9,23 * * * * ?"): 任意时刻的 7,9, 23 秒启动这个任务;

-: 范围;
(cron="7-20 * * * * ?"):任意时刻的 7-20 秒之间, 每秒启动一次

*: 任意;
指定位置的任意时刻都可以

/: 步长;
(cron="7/5 * * * * ?"): 第 7 秒启动, 每 5 秒一次;
(cron="*/5 * * * * ?"): 任意秒启动, 每 5 秒一次;

? :(出现在日和周几的位置) : 为了防止日和周冲突, 在周和日上如果要写通配符使用?
(cron="* * * 1 * ?"): 每月的 1 号, 启动这个任务;

L:(出现在日和周的位置) :last: 最后一个
(cron="* * * ? * 3L"): 每月的最后一个周二

W:Work Day: 工作日
(cron="* * * W * ?"): 每个月的工作日触发
(cron="* * * LW * ?"): 每个月的最后一个工作日触发

#:第几个
(cron="* * * ? * 5#2"): 每个月的第 2 个周 4

2、cron 示例

Expression Meaning
0 0 12 * * ? Fire at 12pm (noon) every day
0 15 10 ? * * Fire at 10:15am every day
0 15 10 * * ? Fire at 10:15am every day
0 15 10 * * ? * Fire at 10:15am every day
0 15 10 * * ? 2005 Fire at 10:15am every day during the year 2005
0 * 14 * * ? Fire every minute starting at 2pm and ending at 2:59pm, every day
0 0/5 14 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
0 0/5 14,18 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
0 0-5 14 * * ? Fire every minute starting at 2pm and ending at 2:05pm, every day
0 10,44 14 ? 3 WED Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRI Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
0 15 10 15 * ? Fire at 10:15am on the 15th day of every month
0 15 10 L * ? Fire at 10:15am on the last day of every month
0 15 10 L-2 * ? Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005 Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3 Fire at 10:15am on the third Friday of every month
0 0 12 1/5 * ? Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ? Fire every November 11th at 11:11am.

3、SpringBoot 整合

定时任务:
1、@EnableScheduling 开启定时任务
2、@Scheduled开启一个定时任务
3、自动配置类 TaskSchedulingAutoConfiguration


/**
 * @author Kisen
 * @email [email protected]
 * @date 2023/1/31 11:32
 * @detail 定时任务
 *  1、@EnableScheduling 开启定时任务
 *  2、@Scheduled开启一个定时任务
 *  3、自动配置类 TaskSchedulingAutoConfiguration
 */
@Slf4j
@Component
@EnableAsync
@EnableScheduling
public class HelloScheduled {

    /**
     * Spring中Cron表达式的区别:
     *      1、在Spring中表达式是6位组成,不允许第七位的年份
     *      2、在周几的的位置,1-7代表周一到周日,MON-SUN
     *      3、定时任务不该阻塞。默认是阻塞的
     *          1)、可以让业务以异步的方式,自己提交到线程池
                     CompletableFuture.runAsync(() -> {
                        xxxService.hello();
                     }, executor);
                2)、支持定时任务线程池;设置 TaskSchedulingProperties
                    spring.task.scheduling.pool.size: 5
                3)、让定时任务异步执行
                    异步任务:
                        1、@EnableAsync:开启异步任务
                        2、@Async:给希望异步执行的方法标注
                        3、自动配置类 TaskExecutionAutoConfiguration 属性绑定在TaskExecutionProperties
                             spring.task.execution.pool.core-size: 5
                             spring.task.execution.pool.max-size: 50
                解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能

     *
     */
    @Async
    @Scheduled(cron = "* * * ? * 2")
    public void hello() throws InterruptedException {
        log.info("hello...");
        TimeUnit.SECONDS.sleep(3);
    }
}

二、分布式定时任务

1、定时任务问题

1)、同时执行导致的重复
由于同样的服务会部署多个节点,多个节点的定时任务代码可能同时启动。将同样的事情做了多次
使用分布式锁。

2)、任务拆分并发执行
使用 ElasticJob

2、扩展-分布式调度

http://elasticjob.io/docs/elastic-job-cloud/00-overview/

标签:10,15,Fire,任务,every,定时,day,分布式
From: https://www.cnblogs.com/yydscn/p/17078568.html

相关文章

  • go ssh判断远程文件是否存在以及定时监控文件的大小
    packagesshutilimport("fmt""path""strconv""strings""time""github.com/fanux/sealos/pkg/logger")constoneKBByte=1024constoneMBByte=1024......
  • 63、缓存---缓存使用---本地缓存与分布式缓存
    1、本地缓存本地缓存可通过Map实现,每次请求时先查看Map中有没有数据,没有再与数据库交互,并再次放到Map中2、分布式缓存......
  • linux基础:4、文件相关信息、链接信息、系统时间、机器克隆、定时任务、paramiko模块相
    目录一、文件相关信息二、文件索引信息三、链接信息四、系统时间五、机器克隆六、定时任务七、paramiko模块八、公钥私钥九、paramiko其他操作十、代码封装十一、面试题回......
  • 分布式锁的几种实现方式
    前言目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一......
  • 分布式事务解决方案
    事务的具体定义事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、......
  • 分布式事务
    事务的具体定义事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、......
  • 分布式事务(二):基于可靠消息的分布式事务
    项目使用技术springboot、dubbo、zookeeper、定时任务、消息中间件MQ一、项目结构maven父子工程:父工程:consis子工程:api-service、order、product、messageapi-service......
  • 云上的米开朗基罗:在不确定时代,寻找建筑般的确定性
    摘要:SRE的核心文化,依旧需要各界携手去探索和发扬。但就像运维所需的确定性那样,SRE探索对每家企业的未来价值来说,也是充满确定性的。本文分享自华为云社区《​​云上的米开朗......
  • Zabbix分布式监控
    一、Zabbix简介1、zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提......
  • docker+Jmeter实现分布式压测
    1、先编写一个基础dockerFile命名:jmbase#UseJava8slimJREFROMopenjdk:8-jre-slimMAINTAINERQJP#JMeterversionARGJMETER_VERSION=5.3#Installfewut......