springquartzjdbc实现任务调度系统.pptx_第1页
springquartzjdbc实现任务调度系统.pptx_第2页
springquartzjdbc实现任务调度系统.pptx_第3页
springquartzjdbc实现任务调度系统.pptx_第4页
springquartzjdbc实现任务调度系统.pptx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新任务框架(rooster)介绍,讲解人 户起龙,大公鸡项目-孵蛋,最早的想法源自老黄 由赵斌同学开发出一套简单模型,并将新项目命名为rooster(大公鸡) 后在此基础上加以包装形成目前的架子,框架大概原理与结构,Rooster使用Spring+Quartz替换调原来单纯的spring任务调度,在此基础上原有任务业务逻辑不变.,Quartz简介,quartz 英 kw:ts 美 kwrts (酷袜子) 中文含义石英 Quartz由James House创建并最初于2001年春天被加入sourceforge工程. Quartz 是一个功能齐全的、开源的、纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细. /,作业-Job,作业是一个执行任务的简单java类。任务可以是任何java代码。只需你实现org.quartz.Job接口并且在出现严 重错误情况下抛出JobExecutionException异常即可。Job接口包含唯一的一个方法execute(),作业从这里开始执行。一旦实现 了Job接口和execute()方法,当Quartz确定该是作业运行的时候,它将调用你的作业。Execute()方法内就完全是你要做的事情。,一个简单的作业实现,public class ScanDirectoryJob implements Job static Log logger = LogFactory.getLog(ScanDirectoryJob.class); /JobExecutionContext 是连接scheduler与job的桥梁 public void execute(JobExecutionContext context) throws JobExecutionException / Every job has its own job detail JobDetail jobDetail = context.getJobDetail(); / The name is defined in the job definition String jobName = jobDetail.getName(); / Log the time the job started (jobName + “ fired at “ + new Date(); /JobDataMap 可给任务传递一些必要的运行参数 JobDataMap dataMap = jobDetail.getJobDataMap(); String dirName = dataMap.getString(“SCAN_DIR“); if (dirName = null) throw new JobExecutionException( “Directory not configured“ ); /TODO: 执行任务具体内容 ,触发器,Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个 最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间 和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要 CronTrigger Rooster中统一使用CronTrigger,触发器示例,UNIX 给出五个域(分、时、日、月和周) Quartz给 了七个域(秒、分、时、日、月、周、年)通常我们使用前六个字段就可以完成任务执行的时间设置.年不是必需存在的字段 scheduler = StdSchedulerFactory.getDefaultScheduler(); / Create the JobDetail JobDetail jobDetail =new JobDetail(“PrintInfoJob“,Scheduler.DEFAULT_GROUP,PrintInfoJob.class); / Create a CronTrigger / CronTrigger that fires 7:30am Mon - Fri CronTrigger trigger = new CronTrigger(“CronTrigger“, null,“0 30 7 ? * MON-FRI“); scheduler.scheduleJob(jobDetail, trigger);,Quartz核心调度器,Quartz调度器(Scheduler) Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器 用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。,作业管理和存储,Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,它利用通常的内存来持久化调度程序信息。这种作业存储类型最容易配置、 构造和运行。对许多应用来说,这种作业存储已经足够了。然而,因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度 信息将被丢失。如果你需要在重新启动之间持久化调度信息,则将需要第二种类型的作业存储 (1)JobStoreTX:当你想要控制事务或工作在非应用服务器环境中时使用 (2)JobStoreCMT:当你工作在应用服务器环境中和想要容器控制事务时使用。,一个简单的quartz调用,/创建调度器 Scheduler scheduler = schedulerFactoryBean.getScheduler(); /创建任务 JobDetail jobDetail = new JobDetail(jobName, jobGroup, jobClass); CronTrigger cronTrigger = new CronTrigger(jobName + “Trigger“, jobName + “TriggerGroup“); /创建触发器 try CronExpression cexp = new CronExpression(cronExpression); cronTrigger.setCronExpression(cexp); catch (Exception e) e.printStackTrace(); /运行任务 scheduler.scheduleJob(jobDetail, cronTrigger);,与spring的结合,/配置 /注入 Resource private SchedulerFactoryBean schedulerFactoryBean; /调用 Scheduler scheduler = schedulerFactoryBean.getScheduler();,新框架移植,原有schedule程序不变 包装一层壳 在新框架里创建新任务 一个建议:将影响任务正常运行的异常抛出,新框架会自动发出报警邮件,与现有框架的结合,public class RefundTreateJob extends QuartzJobBean private Logger logger = LoggerFactory.getLogger(RefundTreateJob.class); Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException JobDetail jobDetail = context.getJobDetail(); (“开始执行任务:“+jobDetail.getName(); /调用原来的方法即可 ApplicationContext applicationContext = SpringContextUtil.getContext(); RefundmentSchedule refundmentSchedule = (RefundmentSchedule)applicationContext.getBean(“refundmentSchedule“); refundmentSchedule.treateRefundment(); (“任务:“+jobDetail.getName()+“执行结束!“); ,优缺点,优点 可视化操作界面,便于测试和配置任务 任务持久化到数据库中 相对于spring job系统更加稳定 邮件报警系统 缺点 需要数据库连接,运行开销更大,效率相对低 未来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论