Quartz简介及快速上手

  1. Quartz简介
    官方网站:http://www.quartz-scheduler.org
    - Quartz是一个功能丰富的开源作业调度框架;
    - 几乎可以集成到任何java应用中,小到单体应用,大到大型电子商务系统;
    - Quartz可以用来执行成千上万的简单或复杂调度任务;
    - Quartz的任务被定义为一组标准的java组件,几乎可以执行任何编程任务;
    - Quartz包含很多企业级功能:支持JTA事务(分布式的事务)和集群;
  2. 用途
    定时发送邮件、短信通知;
    定时做数据同步;
  3. 特点
    强大调度功能;
    灵活的使用方式;
    提供了集群功能;
    - 同一个时间点,只有一个任务可以执行;
    - 如果有一个服务宕机了,那么其他Quartz服务可以接管任务继续执行;
  4. 核心API
    Job接口:定义任务需要实现Job接口
     - JonDetail:具体定义任务实例(任务名称等)
    Trigger:触发器
     - SimpleTrigger:一个任务何时执行,执行多少次,执行多长时间
     - CronTrigger:秒 分 时 天 月 周    [年]
                    0  0  8  ? 5  SUN#2
    Scheduler:调度器->使用Trigger定义的调度规则去执行任务
     Scheduler.scheduleJob(Trigger, JobDetail)
    
    JobKey、TriggerKey、JobDataMap、JobExecutionContext...
  5. 其他调度框架
    Elastic-Job:http://elasticjob.io/index_zh.html
    XXL-JOB:https://github.com/xuxueli/xxl-job/
    XXL-JOB作者许雪里的博客:http://www.xuxueli.com/blog/
  6. 一个Quartz工程实例

    目录结构:
       

    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.etoak.et1906.quartz</groupId>
    	<artifactId>quartz-java</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.quartz-scheduler</groupId>
    			<artifactId>quartz</artifactId>
    			<version>2.3.0</version>
    		</dependency>
    	</dependencies>
    
    </project>
    HelloJob.java:
    package com.etoak.job;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class HelloJob implements Job {
    
    	public HelloJob() {
    		//System.out.println("HelloJob实例被创建了");
    	}
    
    	@Override
    	public void execute(JobExecutionContext context) throws JobExecutionException {
    		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    		System.out.println(dateFormat.format(new Date()) + "-Hello World!");
    	}
    
    }
    SimpleTriggerMain.java:
    package com.etoak;
    
    // 导入JobBuilder中的newJob()静态方法
    import static org.quartz.JobBuilder.newJob;
    
    import java.util.Date;
    
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.SimpleTrigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.TriggerKey;
    import org.quartz.impl.StdSchedulerFactory;
    
    import com.etoak.job.HelloJob;
    
    public class SimpleTriggerMain {
    
    	public static void main(String[] args) throws SchedulerException {
    		// 1. 创建JobDetail
    		JobDetail jobDetail = newJob(HelloJob.class)//
    				.withIdentity("hello", "hello")//
    				.build();
    
    		// 2. 创建Trigger
    		// Trigger trigger = TriggerBuilder.newTrigger()//
    		// .withIdentity("hello", "hello")//
    		// .startNow()// 立即执行
    		// .withSchedule(SimpleScheduleBuilder//
    		// .simpleSchedule()//
    		// .withIntervalInSeconds(5)// 每隔5秒钟执行
    		// .repeatForever()// 永远执行
    		// ).build();
    
    		// 分别获取2秒和10秒后的时间
    		Date current = new Date();
    		long currentMills = current.getTime();
    		Date twoSecondsAfter = new Date(currentMills + 2000L);
    		Date tenSecondsAfter = new Date(currentMills + 10000L);
    
    		// 任务2: 两秒后执行,之后每隔5秒钟打印一次Hello World,重复5次;
    		TriggerKey triggerKey = new TriggerKey("hello", "hello");
    		// SimpleTrigger trigger = TriggerBuilder//
    		// .newTrigger()//
    		// .withIdentity(triggerKey)//
    		// .startAt(twoSecondsAfter) // 两秒后执行
    		// .withSchedule(SimpleScheduleBuilder//
    		// .simpleSchedule()//
    		// .withIntervalInSeconds(5)// 每隔5秒执行
    		// .withRepeatCount(5) // 重复5次
    		// ).build();
    
    		// 任务3: 两秒后执行,之后每隔5秒钟打印一次Hello World,10秒后停止;
    		SimpleTrigger trigger = TriggerBuilder.newTrigger() //
    				.withIdentity("hello")//
    				.startAt(twoSecondsAfter)// 两秒后执行
    				.endAt(tenSecondsAfter)// 10秒后停止
    				.withSchedule(SimpleScheduleBuilder//
    						.simpleSchedule()//
    						.withIntervalInSeconds(5)//
    						.repeatForever()//
    				).build();
    
    		// 3. 创建Scheduler
    		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    		scheduler.scheduleJob(jobDetail, trigger);
    		scheduler.start();
    	}
    
    }
    
    CronTriggerMain.java:
    package com.etoak;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    import com.etoak.job.HelloJob;
    
    public class CronTriggerMain {
    
    	public static void main(String[] args) throws SchedulerException {
    		// 1. 创建JobDetail
    		JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)//
    				.withIdentity("hello")//
    				.build();
    
    		// 2. 创建Trigger
    		Trigger trigger = TriggerBuilder//
    				.newTrigger()//
    				.withIdentity("hello")//
    				.withSchedule(CronScheduleBuilder//
    						.cronSchedule("5,15 14,16 17 * * ?"))
    				.build();
    
    		// 3. 创建Scheduler
    		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    		scheduler.scheduleJob(jobDetail, trigger);
    		scheduler.start();
    	}
    }
    


     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz 是一个开源的作业调度框架,可以用来调度执行 Java 任务。下面是一个简单的 Quartz 配置示例: 1. 首先,需要在项目中引入 Quartz 的依赖包,例如: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 然后,在项目中创建一个 properties 文件,例如 quartz.properties,用来配置 Quartz 的一些参数,例如: ```properties org.quartz.scheduler.instanceName = MyScheduler org.quartz.scheduler.instanceId = AUTO org.quartz.threadPool.threadCount = 5 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz org.quartz.dataSource.myDS.user = root org.quartz.dataSource.myDS.password = root org.quartz.dataSource.myDS.maxConnections = 10 ``` 3. 接下来,需要在代码中创建一个 Scheduler 对象,并启动它,例如: ```java // 创建调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 启动调度器 scheduler.start(); ``` 4. 最后,需要创建一个 JobDetail 对象和一个 Trigger 对象,并将它们关联到 Scheduler 中,例如: ```java // 创建 JobDetail 对象 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "myGroup") .build(); // 创建 Trigger 对象 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "myGroup") .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(10)) .build(); // 将 JobDetail 和 Trigger 关联到 Scheduler 中 scheduler.scheduleJob(jobDetail, trigger); ``` 这样,当调度器启动后,就会按照 Trigger 中定义的调度规则,定时执行 MyJob 类中的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值