dedecms网站地图前台路径不修改,咨询公司注册经营范围,郓城如何做网站seo,做网站的需求分析文章目录 前言一、实现一个Quartz的小案例1.创建一个maven项目2.添加Quartz依赖3.创建一个配置文件配置Quartz信息4.创建一个Job类继承Job接口5.编写主方法逻辑进行测试6.测试运行结果 二、Job和JobDetail总结 前言
目前仍有大部分企业仍在使用Quartz这种定时任务框架#xf… 文章目录 前言一、实现一个Quartz的小案例1.创建一个maven项目2.添加Quartz依赖3.创建一个配置文件配置Quartz信息4.创建一个Job类继承Job接口5.编写主方法逻辑进行测试6.测试运行结果 二、Job和JobDetail总结 前言
目前仍有大部分企业仍在使用Quartz这种定时任务框架它也是功能比较强大的一种定时任务框架它与ElasticJob的主要区别在于它不支持分布式它是一种任务只在单个服务器上运行而ElasticJob可以使用分片策略去执行任务接下来我们将由浅入深去了解它。 一、实现一个Quartz的小案例
1.创建一个maven项目 点击create创建即可
2.添加Quartz依赖 在pom.xml文件中加上quartz的依赖任意选择一个版本
dependencygroupIdorg.quartz-scheduler/groupIdartifactIdquartz/artifactIdversion2.3.1/version
/dependency3.创建一个配置文件配置Quartz信息
新建一个quartz.propertis配置文件进行如下配置 org.quartz.scheduler.instanceNamemyScheduler,是指任务调度器的实例名称 org.quartz.threadPool.threadCount3是指配置的线程池中的线程数量意思是当前定时任务中允许多少个任务同时执行 org.quattz.jobStore.classorg.quartz.simpl.RAMJobStore这是配置Job存储的形式一般有两种一种是存储在数据库中另一种是内存中这里我们配置存储在内存 4.创建一个Job类继承Job接口
删除项目自动生成的App文件新建一个job的包再新建一个MyJob类继承Job接口然后打印一句话和对应的执行时间
public class MyJob implements Job {Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {LocalTime localTime LocalTime.now();System.out.println(我正在执行 localTime.toString());}
}5.编写主方法逻辑进行测试
新建一个测试类类名为QuartzDemo在主方法中编写业务逻辑
public class QuartzDemo {public static void main(String[] args) throws SchedulerException, InterruptedException {Scheduler scheduler StdSchedulerFactory.getDefaultScheduler();scheduler.start();JobDetail jobDetail JobBuilder.newJob(MyJob.class).withIdentity(jobDetail1, group1).build();Trigger trigger TriggerBuilder.newTrigger().startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();scheduler.scheduleJob(jobDetail, trigger);Thread.sleep(600000);scheduler.shutdown();}
}在main方法中主要定义了JobDetail的名称与分组以及按照触发器规则运行以上配置的触发器规则为立即执行间隔10s以及永远执行等规则。然后将job和trigger注册到scheduler当中来使job按照触发器的规则去运行当trigger被触发以后会调用和trigger关联的JobDetail程序会执行JobDetail当中的execute方法execute方法会调用程序中的一个工作线程去调用Job实例这个工作线程就是我们在配置文件中配置的threadCount
6.测试运行结果 二、Job和JobDetail
Job仅仅表明Job需要完成什么样的任务只要把任务逻辑写在Job的实现类当中Job实例的其他属性由JobDetail完成在Job实现类中execute方法的参数JobExecutionContext对象包含了Job运行时的一些信息首先是JobScheduler的应用还有Trigger最后是JobDetail信息。在我们创建JobDetail的时候会将Job的类名传入到JobDetail所以scheduler就知道要执行什么类型的Job每次scheduler要执行Job之前在执行executer方法之前会创建Job的实例因此Job必须有一个无参的构造函数而且实例变量是无法传递的因为每次都会重新实例化新创建的实例被执行完后就会被丢弃了就是会被GC垃圾回收 在Job实现类中可以定义一些获取任务运行过程中的一些信息 测试结果如下 当我定义了一个带参数的构造函数时将不会执行任务除非有一个无参的构造函数 当我们再加上一个无参构造函数对实例变量进行操作如下图 每次任务执行i都是1每次执行都会实例化i的值没有传递。 总结
本篇使用了一个案例让我们大概了解Quartz定时任务的运行规则与实现原理下面我会继续分享Quart在实际工作中的应用场景。