当前位置: 首页 > news >正文

inBuilder低代码平台新特性推荐-第八期

今天来给大家带来的是inBuilder低代码平台特性推荐系列第八期——定时任务!

inBuilder计划任务框架支持快速开发,任务开发完成后,只需发布成bean,并通过配置界面绑定所需触发器,即可到点触发。

一、 概念介绍

定时任务,简要说明就是在指定时间触发执行某个动作。

任务(Job):任务是真正执行体,承载着具体的业务逻辑。

触发器(Tigger): 触发器记录着调度任务的时间规则,Trigger主要包括两种:SimpleTrigger和CronTrigger。

调度器(Scheduler) : 调度器管理了所有的任务和触发器,并负责整个定时系统的调度。

二、 调度任务

在服务启动时,当前服务器默认不会加载系统内的任务。如果想让当前服务器运行任务,需要先将“/server(jstack)/config/platform/common/sys_schedule.json”文件中的开关设置为true。

三、 任务状态

调度任务状态主要分为以下四个:

停止:任务未启动

准备:任务准备执行

启动:任务已被调度服务管理,并在规定时间执行

失败:任务启动失败

“准备”大家可以理解为将要执行,但是还没被调度服务所管理。

任务查询时会判断准备状态任务实际运行状态。只有状态为准备,并已经被任务调度器所管理的任务才会显示为启动。

所以,准备状态ready一般有两个原因:

1.不存在调度服务器,任务根本没有启动。

2.存在调度服务器,但任务查询请求访问的为非调度调度器,无法依赖任务调度器判断任务是否已被管理。(这也是任务操作为什么要直连调度服务器的原因)

四、 开发相关要求

1.      构件逻辑内应避免多线程

inBuilder平台每个定时任务的调度均在各自的线程内进行,线程分配时、销毁时的上下文进行统一管理,构件内开启多线程会导致构件内线程无法获取上下文的情形,因此应避免。

2.      构件应为无状态的构件任务

inBuilder平台定时任务已经支持分布式负载,同一个定时任务的相邻两次间隔很有可能分发在两个不同计算节点上进行,因此构件本身不能依赖上次执行后缓存在计算节点内存中的数据,即构件无状态。

3.      构件任务内不允许吞异常

inBuilder平台定时任务已经支持异常捕获,关键的异常信息可以以RuntimeException的类型扔出来 框架捕捉后会统一记录到执行日志中,直接在前端进行查看。

五、 开发示例

1.  场景介绍

商品字典单价定时同步至未提交的销售订单。

2.  运行时效果及要求

每一分钟同步一次。

同步时只将商品的单价同步至销售订单即可。

3.  开发步骤

01开启计划任务: 启动服务之前,确保以下文件中计划任务的可用配置已开启。

       /server/config/platform/common/sys_schedule.json中ScheduleCenter改为true

02任务定义

菜单路径:【系统公共】-【系统配置】-【调度任务】-【任务管理】。

任务管理页面如图所示。左侧列表展示当前系统支持或已预置的任务类型,右侧列表展示当前任务类型下的任务信息。

点击【新增】按钮,进入单任务详情界面,输入任务编号、任务名称,选择定时器。

点击【选择】进入定时器选择列表界面,可以选择已经有的定时器,也可以新增定时器,我们点击【新增】进入定时器定义界面,完成定时器编辑之后选中该定时器。

【任务信息】,定义完成通用构件之后,可以选择补充。

03 通用构件定义

       打开商品业务对象,在该业务对象新建通用构件。

进入通用构件设计器界面,填写应用、服务单元、版本等信息,方法列表中点击新增填写方法编号GoodToOrder、名称商品单价同步销售订单管理,入参和返回值本例未使用不用维护。

用idea打开通用构件所在maven工程,编写代码逻辑。

在通用构件同目录下新建java文件,将其器发布成bean。

04 单任务配置通用构件配置

       方法编码为通用构件的方法编码,元数据标识为通用构件发布的元数据ID,组件名称为通用构件的名称;对象参数为通用构件执行方法需要传递的参数。对象参数中若包含多个参数,使用英文逗号隔开,若包含数组则使用英文中括号括起。

05 查看执行结果

       启动服务,查看日志,并可以通过详细信息查看详细执行情况。

查看调度日志,可以看到任务执行完成等事件,代表定时任务执行成功。

欢迎大家下载inBuilder开源社区版,免费试用体验。

相关文章:

  • 22. 深度学习 - 自动求导
  • 基本算法:二分
  • 02.webpack中多文件打包
  • Spring Boot简介
  • 电子学会2023年6月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析
  • 广西柳州机械异形零部件三维扫描3D抄数全尺寸测绘建模-CASAIM中科广电
  • mongodb——概念介绍(文档,集合,固定集合,元数据,常用数据类型)
  • C/C++---------------LeetCode第1207.独一无二的出现次数
  • 使用Dockerfile构建hexo博客镜像,并部署
  • Qt QWebSocket实现JS调用C++
  • 广西南宁新能源汽车电机定子三维扫描3D尺寸测量检测-CASAIM中科广电
  • 数据仓库相关
  • 远勤山丨品质第一 服务先行 扎扎实实打造让消费者满意的产品
  • 汇编层面有三个主要的操作对象
  • git 提交成了LFS格式,如何恢复
  • (三)从jvm层面了解线程的启动和停止
  • “大数据应用场景”之隔壁老王(连载四)
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Babel配置的不完全指南
  • C++11: atomic 头文件
  • C++类中的特殊成员函数
  • Docker 笔记(2):Dockerfile
  • javascript 哈希表
  • java多线程
  • linux安装openssl、swoole等扩展的具体步骤
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从伪并行的 Python 多线程说起
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 理清楚Vue的结构
  • 码农张的Bug人生 - 见面之礼
  • 异常机制详解
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 《码出高效》学习笔记与书中错误记录
  • python最赚钱的4个方向,你最心动的是哪个?
  • Semaphore
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • $.proxy和$.extend
  • (Python) SOAP Web Service (HTTP POST)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NetCore项目nginx发布
  • .net开发时的诡异问题,button的onclick事件无效
  • .net中生成excel后调整宽度
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 转载 ] SharePoint 资料
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [autojs]逍遥模拟器和vscode对接
  • [C++提高编程](三):STL初识
  • [echarts] y轴不显示0
  • [Excel VBA]单元格区域引用方式的小结
  • [IE编程] IE8 新增的C++开发接口