• quartz实现定时任务调度


    一. 业务需求:

    实际工作中我们一般会遇到这种需求: 使用Ajax技术每隔几秒从缓存或数据库中读取一些数据, 然后再显示在页面上, 眼下有一个比較好的定时调度框架: quartz能够满足我们的需求.


    二. 核心类:

    Job: 一个接口, 它里面仅仅有一个方法void execute()我们须要运行任务就须要实现这个接口,在execute中实现我们要做的事情。
    JobDetail: 在Quartz每次执行Job时,都须要创建一个Job实例,所以它直接接受一个实现类以便执行时实例化,还须要一个描写叙述信息,

    JobDetail就是做这个事情。
    Trigger: 是一个抽象类,描写叙述触发运行的时间。它主要有SimpleTrigger和CronTrigger这两个子类,当仅需触发一次或者以固定时间间隔周期运行。SimpleTrigger是最适合的选择;而CronTrigger则能够通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00运行,周一、周三、周五下午5:00运行等
    Scheduler: 能够觉得是quartz的调度器,我们把JobDetail和Trigger注冊到Scheduler。由它调度执行。


    三. 简单样例:

    1. 所需jar包:

    2. MyJob.java

    /**
     * 创建一个MyJob类, 实现Job接口, 为省事測试方法也写在这个类中
     */
    public class MyJob implements Job{
    	
    	// 測试方法
        public static void main(String[] args) {
    		Scheduler scheduler = null;
    		try {
    			// 创建一个JobDetail实例
    			JobBuilder jobBuilder = JobBuilder.newJob(MyJob.class); 
    			jobBuilder.withDescription(" read data from DB.");
    			JobDetail jobDetail = jobBuilder.build();
    
    			// 创建一个调度规则, 每3s执行一次
    			SimpleScheduleBuilder simpleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever();
    			Trigger trigger = TriggerBuilder.newTrigger().withSchedule(simpleBuilder).startNow().build();
    
    			// 从工厂中获取一个调度器Scheduler
    			SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    			scheduler = schedulerFactory.getScheduler();
    			
    			// 注冊jobDetail, trigger到调度器Scheduler
    			scheduler.scheduleJob(jobDetail, trigger);
    			
    			// 開始执行Job
    			scheduler.start();
    		} catch (Exception e1) {
    			try {
    				// 出异常了, 停止执行Job
    				scheduler.shutdown();
    			} catch (SchedulerException e2) {
    				e2.printStackTrace();
    			}
    			e1.printStackTrace();
    		}
    	}
        
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        	String description = jobExecutionContext.getJobDetail().getDescription();
            System.out.println("定时Job開始执行: " + description);
        }
    }




  • 相关阅读:
    Verilog手绘FVH信号
    Verilog编码规范与时序收敛
    关于DDS的基础知识
    阅读ug949-vivado-design-methodology笔记
    在windows系统上使用pip命令安装python的第三方库
    pandas第一课
    视频外同步信号研究---fvh
    FPGA调试技巧
    关于FIFO异步复位的问题
    搭建一个microblaze的最小系统
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6752751.html
Copyright © 2020-2023  润新知