1、应用系统统一开发平台(SG-UAP)培训 任务调度,2019年1月,目录,2,引言-课程目标,3,培训要达到的目标,了解任务调度背景需求。 了解任务调度系统物理部署 了解任务调度系统逻辑部署。 熟练任务调度功能点。 熟练掌握业务系统组件的开发与发布。 熟练掌握任务调度的配置。,目录,4,产品介绍-概述,5,根据各个业务环境的反馈以及用户的需求,在诸多的业务场景下都需要提供自动化的任务执行能力,例如在不需要用户参与的情况下,定时得从不同渠道获取大量数据,将这些数据根据不同的业务规则整合与存储,然后针对规整后的数据进行各种分析操作,最终生成满足业务需求的分析结果。SG-UAP任务调度系统就是为满足
2、这一需求而形成的系统。,产品介绍-架构设计,6,应用系统统一开发平台任务调度系统基于SG-UAP,为业务应用中的任务调度提供设计和运行支持。,产品介绍-逻辑部署视图,7,系统功能组件分别部署到在展示层、公共服务层,形成如左图所示的逻辑部署任务调度功能只依赖于平台基础设施,并不依赖与平台其它公共套件的功能,可单独部署。,产品介绍-物理部署视图,8,任务调度作为平台公共套件的一部分为多个业务系统提供公共服务,不与业务系统共享服务器资源。套件之间可以共享服务器资源,不同套件根据实际情况进行组合部署在一个物理服务器的不同中间件容器中。公共套件的运维管理模式与业务系统相同。,产品介绍-工作原理,9,工作
3、原理: 业务系统自定义Spring Bean,继承执行组件bundle中的组件接口ITaskDispatchService,并通过配置文件将该Bean发布成OSGi服务,将服务注入到组件bundle中。从而执行组件可以接受远程任务调度引擎的触发调度。任务调度引擎组件为任务调度其他组件提供引擎支撑,采用开源quartz(2.1.5),并通过quartz提供的监听及插件扩展点做扩展。( quartz 为Spring官方推荐定制任务引擎),产品介绍-特点与适用范围,10,在诸多的业务场景下都需要提供自动化的任务执行能力,在不需要用户参与的情况下定时执行业务逻辑处理。主要功能如下:,产品介绍-特点与适
4、用范围,11,产品介绍-特点与适用范围,12,目录,13,快速上手-开发流程,14,15,创建定时触发的业务逻辑类(该类要实现munication.restService.ITaskDispatchService 接口),快速上手-开发流程,开发需要调度的业务逻辑,16,快速上手-开发流程,发布并验证业务逻辑服务,17,快速上手-开发流程,定义执行组件,18,快速上手-开发流程,定义任务,19,快速上手-开发流程,启动任务,目录,20,示例演示-示例场景,21,请使用任务调度系统,定义一个任务,每间隔一分钟及每间隔四十五秒将(触发ID、姓名、公司、触发次数、任务名称、任务描述、录入时间)查询p
5、roMgr项目中的p_project表中查询记录数插入TD_TASKDISPATCHTEST表。在任务监听器配置中配置任务日志、超时预警两种监听任务。并可在超时预警查询、日志查询中可查询。(注意:触发ID使用UUID,触发次数为逐次累加所得,录入时间为数据库时间,姓名、公司需在组件定义参数在任务定义中录入参数值,不允许将参数值直接写死在组件里。),22,1、新建一个业务模块,添加要依赖的包,示例演示-示例场景,示例实现,23,import java.io.IOException; import java.math.BigDecimal; import java.util.List; impor
6、t java.util.Map; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import com.sgcc.uap.persistence.IH
7、ibernateDao; import munication.TaskComponent; import munication.restService.ITaskDispatchService; import com.sgcc.uap.task.po.TdTaskdispatchtest;,2、实现要定时触发的业务逻辑类(该类要实现munication.restService.ITaskDispatchService 接口)具体实现如下,示例演示-示例场景,业务逻辑类,24,public class Task implements ITaskDispatchService Autowired
8、private IHibernateDao hibernateDao;public TaskComponent dispatchComponent(TaskComponent arg0) / 获取任务名称 String jobName = arg0.getJobName(); /获取任务描述 String jobDesc = arg0.getJobDescription(); /获取节点对象 JsonNode node = arg0.getJsonParam(); ObjectMapper om = new ObjectMapper();,示例演示-示例场景,业务逻辑类,25,try Map
9、m = om.readValue(node.getTextValue(),Map.class); String jname = m.get(“jname“); /获取任务执行组件中的参数值 String dept = m.get(“dept“); /获取任务执行组件中的参数值 System.out.println(jname); System.out.println(dept); TdTaskdispatchtest po = new TdTaskdispatchtest(); po.setDept(dept); po.setJname(jname); Thread thread = new
10、Thread(); po.setJobdescription(jobDesc); po.setJobname(jobName);,示例演示-示例场景,业务逻辑类,26,String sql=“select coalesce(max(num),0) from TD_TASKDISPATCHTEST“; List list = hibernateDao.executeSqlQuery(sql); int num=(BigDecimal)list.get(0).intValue(); num+; po.setNum(num); po.setInserttime(new java.util.Date(
11、); hibernateDao.saveOrUpdateObject(po); catch (JsonParseException e1) e1.printStackTrace(); catch (JsonMappingException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace(); return null; ,示例演示-示例场景,业务逻辑类,27,3、将业务逻辑发布成服务,配置文件如下:,示例演示-示例场景,发布业务逻辑,28,4、将新建的任务调度模块部署在一个uap项目中(注意将taskdisp
12、atch放在白名单里),启动应用服务器。访问:http:/127.0.0.1:9000/uap/workbench/default.jsp。 出现下图:,示例演示-示例场景,定义执行组件,29,示例演示-示例场景,定义执行组件,30,5、点击任务调度,打开任务调度页面,示例演示-示例场景,定义执行组件,31,6、点击组建分组可以看到组建分组下的所有分组:右键点击“新建组建分组”:输入想要的分组名称,如:dispatch,定义执行组件,示例演示-示例场景,32,7、右键刚建好的“dispatch”新建执行组件:即配置我们所发布的业务逻辑(注意:ServiceID为任务调度模块中所发出的服务的id
13、,此处为testTaskService。URI为本次访问的http:/IP:PORT/uap项目名称),示例演示-示例场景,定义执行组件,33,8、点击添加参数定义:定义组件参数(该参数可以在重写方法中的参数 获得),完成后 点击 保存,执行组件就定义完成了,定义执行组件,示例演示-示例场景,34,9、在任务分组下新建一个“dispatchgroup”,示例演示-示例场景,定义任务,35,10、右键点击刚刚新建的分组,点击新建 任务,并设置任务相关信息,示例演示-示例场景,定义任务,36,11、设置完成任务基本信息后,点击“执行组件”,定义任务,示例演示-示例场景,37,12、点击添加执行组件
14、,选择我们在第一个环节中新建的“dispatchComp”,点击选择,示例演示-示例场景,提添加执行组件,38,13、点击编辑参数,设置参数对应的值,示例演示-示例场景,配置任务参数,39,14、点击 调度规则,为这个任务添加调度规则(按照场景中要求的设置),配置调度规则,示例演示-示例场景,40,15、点击“任务监控”,找到“任务监听器配置”,点击新增,为我们刚建好的任务配置监听,示例演示-示例场景,配置任务监听,41,16、在左侧选中我们新建的任务组件,右侧点击“启动任务”,选中的任务组件就开始执行了,启动任务,示例演示-示例场景,目录,42,答疑常见问题,43,1)验证执行组件输入地址正确地址,将serviceId填写错误,结论:收到Json数据,组件配置成功,输入ServiceID找不到。,答疑常见问题,44,2)输入IP或端口错误,结论:无法连接到服务器,答疑常见问题,45,3)输入系统客户端名称错误或Rest资源名错误,结论:无法找到服务器相应的WEB资源服务,答疑常见问题,46,4)输入错误的执行组件bundle名称,结论:UAP无法找到OSGI相应的模块项目,谢 谢!,47,