Spring Cloud Alibaba定时任务

简介: Spring Cloud Alibaba定时任务是阿里巴巴开发的一款低延时、高可用、可视化的任务调度产品(定时、任务依赖编排、分布式跑批),支持日志服务、监控大盘、报警监控。

背景

定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等。


在Java中自带的解决方案

  • Jdk timer:固定频率执行,同一个线程串行执行
  • Jdk ScheduledExecutorService:固定频率执行,支持多线程并发执行,解决timer串行的问题。

以上两种方案都不支持cron表达式,在分布式架构下也不支持幂等执行,一般用的比较少。


Spring中解决方案

  • Spring task:支持cron表达式,使用比较轻量,适用于单节点的应用,分布式架构下不支持幂等执行,需要业务自己做抢锁。
  • Quartz:Springboot2.0版本支持quartz集成,可以结合数据库做持久化,框架封装抢锁触发逻辑,解决Spring task不支持幂等执行的问题。


如上解决方案都无可视化界面,运维比较麻烦,且无报警,在生产环境容易出问题。Spring Cloud Alibaba定时任务是阿里巴巴基于SchedulerX2.0开发的企业级定时任务解决方案,只需要在application文件中定义自己的任务,就可以一键部署起来,具有环境隔离、应用隔离、高可用、低延时、可视化、可报警等能力。


优势

Spring原生

支持Springboot声明式定义,命名空间、应用、任务、报警等都通过配置文件声明,方便管理自己应用下的任务,并且可以支持修改。可以拿到任何环境一键启动应用。


高可用

SchedulerX2.0采用高可用架构,任务多备份机制,经历阿里集团多年双十一、容灾演练,可以做到整个集群挂掉任意一个机房,任务调度都不会收到影响。


可视化

schedulerx拥有丰富的可视化能力,比如

  • 用户大盘

  • 查看任务历史执行记录

  • 查看任务运行日志

  • 查看任务运行堆栈

  • 查看任务操作记录


报警监控

  • 报警:支持邮件、钉钉、短信、电话,其他报警方式在规划中。支持任务失败、超时、无可用机器报警。报警内容可以简单的看出任务失败的原因,以钉钉机器人为例


分布式模型

Schedulerx2.0提供了丰富的分布式模型,可以处理各种各样的分布式处理业务场景。包括单机、广播、分片、MapReduce等。


如何接入

完整的demo工程请点击下载

  1. 登录阿里云分布式任务调度Schedulerx2.0控制台,点击开通服务


  1. pom增加依赖schedulerx2-spring-boot-starter,需要1.5.0.2以上版本
<dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-spring-boot-starter</artifactId><version>1.5.0.2</version></dependency>

3. 配置application.yml

spring:   schedulerx2:      endpoint: acm.aliyun.com   #请填写不同regin的endpoint      namespace: 433d8b23-06e9-xxxx-xxxx-90d4d1b9a4af #region内全局唯一,建议使用UUID生成      namespaceName: 学仁测试
      appName: myTest
      groupId: myTest.group      #同一个命名空间下需要唯一      appKey: myTest123@alibaba  #应用的key,不要太简单,注意保管好      regionId: public           #填写对应的regionId      aliyunAccessKey: xxxxxxx   #阿里云账号的ak      aliyunSecretKey: xxxxxxx   #阿里云账号的sk      alarmChannel: sms,ding     #报警通道:短信和钉钉      jobs:          simpleJob:             jobModel: standalone
            className: com.aliyun.schedulerx.example.processor.SimpleJob
            cron: 0/30 * * * * ?   # cron表达式            jobParameter: hello
            overwrite: true 
         shardingJob:             jobModel: sharding
            className: ccom.aliyun.schedulerx.example.processor.ShardingJob
            oneTime: 2022-06-02 12:00:00   # 一次性任务表达式            jobParameter: 0=Beijing,1=Shanghai,2=Guangzhou
            overwrite: true         broadcastJob:   # 不填写cron和oneTime,表示api任务            jobModel: broadcast
            className: com.aliyun.schedulerx.example.processor.BroadcastJob
            jobParameter: hello
            overwrite: true         mapReduceJob:             jobModel: mapreduce
            className: com.aliyun.schedulerx.example.processor.MapReduceJob
            cron: 0 * * * * ?
            jobParameter: 100            overwrite: true      alarmUsers:     #报警联系人         user1:            userName: 张三
            userPhone: 12345678900         user2:            userName: 李四
            ding: https://oapi.dingtalk.com/robot/send?access_token=xxxxx
  1. 实现任务接口,以单机任务为例,更多任务模型可以看demo
packagecom.aliyun.schedulerx.example.processor;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.stereotype.Component;
importcom.alibaba.schedulerx.worker.domain.JobContext;
importcom.alibaba.schedulerx.worker.processor.JavaProcessor;
importcom.alibaba.schedulerx.worker.processor.ProcessResult;
/*** 单机任务,所有节点随机选一台执行*/@ComponentpublicclassSimpleJobextendsJavaProcessor {
/** log4j2/logback配置schedulerxLogAppender,可以进行日志采集*/privatestaticfinalLoggerlogger=LoggerFactory.getLogger("schedulerx");
@OverridepublicProcessResultprocess(JobContextcontext) throwsException {
System.out.println("this is process, para="+context.getJobParameters());
logger.info("hello schedulerx!");
returnnewProcessResult(true);
    }
@Overridepublicvoidkill(JobContextcontext) {
    }
}

如何验证

启动你的springboot启动类,大概1分钟左右,你的定时任务就可以正常调度起来了。


如果想要通过控制台验证和查看任务,也可以访问控制台

  1. 命名空间创建成功

  1. 应用创建成功,且有实例注册成功

  1. 任务创建成功

  1. 查看历史记录

目录
相关文章
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
15天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
124 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
22天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
55 2
|
29天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
30天前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
30天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
29天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
123 1
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
|
2月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
2101 18