quartz调度器简单例子
来源:互联网 发布:海问律师事务所 知乎 编辑:程序博客网 时间:2024/05/11 18:36
以下例子是根据慕课网的视频学习仅作为个人记录之用。
1、创建maven 工程
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jzy.demo</groupId> <artifactId>HelloQuartz</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>HelloQuartz</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version></dependency> </dependencies></project>
2、创建HelloJob类,实现Job接口和execute方法编写自己的业务逻辑
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobKey;import org.quartz.Trigger;import org.quartz.TriggerKey;public class HelloJob implements Job{public void execute(JobExecutionContext context) throws JobExecutionException {//// 编写业务逻辑,打印当前时间Calendar calendar = Calendar.getInstance();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("HelloJob当前时间是:"+sf.format(calendar.getTime()));}}3、创建Schedule类import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleScheduleBuilder;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;public class HelloScheduler { public static void main(String[] args) throws SchedulerException {//创建一个JobDetail 实例,然后与HelloJob 实例绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("HelloScheduler当前时间是:"+sf.format(date));//获取距离当前时间3秒后的时间date.setTime(date.getTime()+3000);//获取当前时间之后的6秒钟的时间Date endDate = new Date();endDate.setTime(endDate.getTime()+6000);//创建于一个触发器,定义该job立即执行,并且每个2秒执行一次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date)//开始时间.endAt(endDate)//结束时间.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())//执行计划.build();//创建scheduler 实例SchedulerFactory sfact = new StdSchedulerFactory();Scheduler scheduler = sfact.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail, trigger);}}
以上使用的是SimpleTrigger,以下使用的CronTrigger,可以实现更为复杂的定时计划。
差别在于构建相应的Trigger对象的方法上
CronTrigger trigger = (CronTrigger)TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))//*表示每(每秒、每分。。),?表示没有.build();其中cronSchedule方法的参数是一个Cron表达式的字符串,分为 秒 分 时 日 月 周 年,年可以缺省,当然还可可以使用在线生成器工具去生成一个表达式即可。
结合spring MVC:以下的结合只是给出了配置,业务类需要自己实现补充
<!-- 如果只是想简单的调用一个方法,name就使用这种方法创建任务 --><bean id="simpleJobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="myBean" /><!-- 传入一个bean对象,此对象已经使用@Component("myBean")注解的方式加入到spring容器 --><property name="targetMethod" value="printMessage" /><!-- 调用myBean里面的printMessage(自己的业务逻辑) --></bean><!-- 如果想要更加灵活的使用,可以传递参数进去的话,使用如下方式创建任务 --><bean id="firstComplexJobDetail"class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass"value="com.test.springquartz.quartz.FirstScheduledJob" /><!-- 需要运行的类 ,这个类需要继承QuartzJobBean并重写executeInternal方法--><property name="jobDataMap"><!-- 传入参数 --><map><entry key="anotherBean" value-ref="anotherBean" /><!-- key要与注解的bean一致--></map></property><property name="Durability" value="true"/><!-- 没有此属性会报错,job detail应该是即使没有trigger也要保留在quartz的存储中 --></bean><!-- trigger --><!-- 距离当前时间1秒之后执行,之后每隔两秒钟执行一次 --><bean id="mySimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="simpleJobDetail"/> <property name="startDelay" value="1000"/> <property name="repeatInterval" value="2000"/></bean> <!-- 每隔5秒钟执行一次 --><bean id="myCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="firstComplexJobDetail"/> <property name="cronExpression" value="0/5 * * ? * *"/></bean><!-- 调度器 --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><!-- 实践说明不用jobDetails属性也会按照trigger执行任务 --> <property name="jobDetails"> <list> <ref bean="simpleJobDetail"/> <ref bean="firstComplexJobDetail"/> </list> </property> <property name="triggers"> <list> <ref bean="mySimpleTrigger"/> <ref bean="myCronTrigger"/> </list> </property></bean>
阅读全文
0 0
- quartz调度器简单例子
- 企业级任务调度框架Quartz 三 一个简单的Quartz 例子
- 企业级任务调度框架Quartz 三 一个简单的Quartz 例子
- Quartz 2.2简单例子
- spring:quartz 简单例子
- Quartz让作业调度简单
- Quartz调度框架简单介绍
- 定时调度quartz简单用法
- 使用Quartz调度器
- 使用Quartz调度器
- Quartz任务调度器
- Quartz调度器
- 任务调度器Quartz
- quartz 调度器配置
- Quartz 作业调度器
- Quartz任务调度器
- quartz调度器架构
- Quartz定时调度器
- VPN篇(5.6) 06. 多条 IPsec VPN 冗余 ❀ 飞塔 (Fortinet) 防火墙
- 【Spring】【一】基本注解以及小实例
- ABAP开发CHECK, EXIT, RETURN, LEAVE PROGRAM用法
- C/C++ 之 define的使用
- 决策树和决策森林
- quartz调度器简单例子
- 探究 Java 虚拟机栈
- JDBC学习笔记
- 解决Django和EasyUI搭配使用时出现的CSRF问题
- Python文件头模板
- php黑魔法
- ubuntu系统下wireshark普通用户抓包设置
- 229. Majority Element II
- Java反射机制