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. 查看历史记录

目录
相关文章
|
14天前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
14天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
14天前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
14天前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
15天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
230 0
|
2天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
66 7
|
30天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
235 13
Spring Cloud Alibaba:一站式微服务解决方案
|
2月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
248 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
存储 人工智能 Java
Spring AI Alibaba 配置管理,用 Nacos 就够了
本文通过一些实操案例展示了 Spring AI Alibaba + Nacos 在解决 AI 应用中一系列复杂配置管理挑战的方案,从动态 Prompt 模板的灵活调整、模型参数的即时优化,到敏感信息的安全加密存储。Spring AI Alibaba 简化了对接阿里云通义大模型的流程,内置 Nacos 集成也为开发者提供了无缝衔接云端配置托管的捷径,整体上极大提升了 AI 应用开发的灵活性和响应速度。
273 14
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
37 6