`

Quartz之SimpleTrigger

 
阅读更多
SimpleTrigger:
它只能用于指定任务在一个特定时间内运行,可指定任务的重复(时间,次数)与间隔(时间,次数)

代码说明了一切,请参见注释!
工程图片

SimpleJob.java
import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;

public class SimpleJob implements Job {

    private static Logger _log = LoggerFactory.getLogger(SimpleJob.class);

    public SimpleJob() {    }
    
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
      
        JobKey jobKey = context.getJobDetail().getKey();        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");      
        _log.error("Quarta JobKey : " + jobKey + " 执行时间:  " + sdf.format(new Date()));
        
    }
}


SimpleTriggerExample.java
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.DateBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * SimpleTrigger:它只能用于指定任务在一个特定时间内运行,可指定任务的重复(时间,次数)与间隔(时间,次数)
 * */
public class SimpleTriggerExample {

	Logger log = LoggerFactory.getLogger(SimpleTriggerExample.class);

	public void run() throws Exception {

		// 通过SchedulerFactory获取一个调度器实例
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

		// 在当前时间15秒后运行
		Date startTime = DateBuilder.nextGivenSecondDate(null,15);

		// 通过过JobDetail封装SimpleJob,同时指定Job在Scheduler中所属组及名称,这里,组名为group1,而名称为job1。
		JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build();

		// 创建一个SimpleTrigger实例,指定该Trigger在Scheduler中所属组及名称。
		// 接着设置调度的时间规则.当前时间15秒后运行,每10秒运行一次,共运行5次
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
								.startAt(startTime).withSchedule(simpleSchedule()											
								.withIntervalInSeconds(10)
								.withRepeatCount(5)
								)
								.build();*/
		
		//从当前时间开始,每10秒钟执行一次,直到程序结束为止
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
								.startAt(startTime).withSchedule(simpleSchedule()											
								.withIntervalInSeconds(10)
								.repeatForever()
								)
								.build();*/
		
		//从当前时间开始,每一分钟执行一次,在设置withIntervalInSeconds(10)无效
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
		.startAt(startTime).withSchedule(simpleSchedule()											
		//.withIntervalInSeconds(10)
		.repeatMinutelyForever()
		)
		.build();*/

		
		//从当前时间开始,repeatMinutelyForever(10),不带参数为每分钟执行一次,带了参数等于: 60*10
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
		.startAt(startTime).withSchedule(simpleSchedule()	
		.repeatMinutelyForever(10)
		)
		.build();*/
		
		
		//从当前时间开始,每秒钟执行一次,当然带了参数等于1*? ^_^
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
		.startAt(startTime).withSchedule(simpleSchedule()	
		.repeatSecondlyForever()
		)
		.build();*/
		
		//repeatHourlyForever()方法是第1小时执行一次,带了参数等于1*?
		
		//从当前时间开始,每1分钟执行一次,并且只执行4次
		/*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
		.startAt(startTime).withSchedule(simpleSchedule()	
		.repeatMinutelyForTotalCount(5)
		)
		.build();*/
		
		//repeatSecondlyForTotalCount(5),反过来说:只执行4次,每次执行的间隔为1秒钟
		
		//当前时间的加上5分钟
		Date endTime = DateBuilder.nextGivenMinuteDate(null, 5);
		System.out.println("开始时间: "+ sdf.format(startTime)+",结束时间: "+sdf.format(endTime));
		
		//这个比较常用吧
		//指定从: startTime为开始时间,endTime为结束时间,规则:每2秒钟执行一次,repeatForever()方法表示重复执行,一直到结束时间
		SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1")
		.startAt(startTime)	
		.endAt(endTime)		
		.withSchedule(
				simpleSchedule()
				.withIntervalInSeconds(2)
				.repeatForever()
		)					
		.build();		
		
		// 注册并进行调度
		Date ft = sched.scheduleJob(job, trigger);
		
		//getRepeatInterval()指:执行任务间的间隔时间,getRepeatCount()表示总共执行多少次,-1表示未知
		log.error(job.getKey() + " will run at: " + sdf.format(ft)
				+ " and repeat: " + trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// 调度启动
		sched.start();

		try {
			//1分钟
			Thread.sleep(600L * 1000L);
			
		} catch (Exception e) {
		}

		//调度器停止
		sched.shutdown(true);
		
		SchedulerMetaData metaData = sched.getMetaData();
		//总共运行了多少个任务
		log.error("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
	}

	public static void main(String[] args) throws Exception {
		
		SimpleTriggerExample example = new SimpleTriggerExample();
		example.run();
	}
}

工程请参见附件!
  • 大小: 33.7 KB
分享到:
评论
5 楼 yt1090867 2015-03-18  
非常赞啊
4 楼 zxq12091986 2012-09-24  
[i][/i][u][/u]
引用

    [*]
[img][/img][url][/url][flash=200,200][/flash]
45454645[size=large][/size][align=center][/align][color=olive][/color]
3 楼 lzc_xiaoniu 2012-06-12  
请教个问题
        SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
        .startAt(startTime)  
        .endAt(endTime)      
        .withSchedule( 
                simpleSchedule() 
                .withIntervalInSeconds(2) 
                .repeatForever() 
        )                    
        .build();  

    .endAt(endTime)     有用吗。我的用了之后不能执行任务,注释掉就可以。。
2 楼 liuzidong 2011-08-09  
我的Quartz也是2.0的,这个肯定和你配置的日志文件有关了!
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="default" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
    </layout>
  </appender>

 <logger name="org.quartz">
   <level value="info" />
 </logger>

  <root>
    <level value="info" />
    <appender-ref ref="default" />
  </root>  
</log4j:configuration>

运行结果如下:
[INFO] 2011-08-09 05:09:12.796 下午 main [org.quartz.simpl.SimpleThreadPool]
Job execution threads will use class loader of thread: main

[INFO] 2011-08-09 05:09:12.875 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl

[INFO] 2011-08-09 05:09:12.890 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.0.1 created.

[INFO] 2011-08-09 05:09:12.890 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.

[INFO] 2011-08-09 05:09:12.890 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.0.1) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.


[INFO] 2011-08-09 05:09:12.890 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'

[INFO] 2011-08-09 05:09:12.890 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.0.1

开始时间: 2011-08-09 05:09:15,结束时间: 2011-08-09 05:10:00
[ERROR] 2011-08-09 05:09:12.921 下午 main [org.quartz.examples.example2.SimpleTriggerExample]
group1.job1 will run at: 2011-08-09 05:09:15 and repeat: -1 times, every 2 seconds

[INFO] 2011-08-09 05:09:12.921 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.

[ERROR] 2011-08-09 05:09:15.109 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:15

[ERROR] 2011-08-09 05:09:17.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:17

[INFO] 2011-08-09 05:09:17.125 下午 Timer-0 [org.quartz.utils.UpdateChecker]
New Quartz update(s) found: 2.0.2 [http://www.terracotta.org/kit/reflector?kitID=default&pageID=QuartzChangeLog]

[ERROR] 2011-08-09 05:09:19.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:19

[ERROR] 2011-08-09 05:09:21.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:21

[ERROR] 2011-08-09 05:09:23.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:23

[ERROR] 2011-08-09 05:09:25.000 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:25

[ERROR] 2011-08-09 05:09:27.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:27

[ERROR] 2011-08-09 05:09:29.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:29

[ERROR] 2011-08-09 05:09:31.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:31

[ERROR] 2011-08-09 05:09:33.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:33

[ERROR] 2011-08-09 05:09:35.000 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:35

[ERROR] 2011-08-09 05:09:37.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:37

[ERROR] 2011-08-09 05:09:39.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:39

[ERROR] 2011-08-09 05:09:41.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:41

[ERROR] 2011-08-09 05:09:43.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:43

[ERROR] 2011-08-09 05:09:45.343 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:45

[ERROR] 2011-08-09 05:09:47.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:47

[ERROR] 2011-08-09 05:09:49.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:49

[ERROR] 2011-08-09 05:09:51.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:51

[ERROR] 2011-08-09 05:09:53.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:53

[ERROR] 2011-08-09 05:09:55.000 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:55

[ERROR] 2011-08-09 05:09:57.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:57

[ERROR] 2011-08-09 05:09:59.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example2.SimpleJob]
Quarta JobKey : group1.job1 执行时间:  2011-08-09 05:09:59

[INFO] 2011-08-09 05:19:12.921 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.

[INFO] 2011-08-09 05:19:12.921 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.

[INFO] 2011-08-09 05:19:12.921 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.

[ERROR] 2011-08-09 05:19:12.921 下午 main [org.quartz.examples.example2.SimpleTriggerExample]
Executed 23 jobs.
1 楼 njchenyi 2011-08-09  
我用Quartz2.0运行你的代码,只有两行日志提示,没有其他输出

相关推荐

    Quartz 多任务和单任务实现java源码

    Quartz SimpleTrigger CronTrigger java 源码 多任务 单任务实现 jobQuartz SimpleTrigger CronTrigger java 源码 多任务 单任务实现 job

    Android studio下的quartz工程

    你可以使用`org.quartz.CronTrigger`或`org.quartz.SimpleTrigger`来创建。例如,以下代码创建了一个基于cron表达式的触发器,每天的10点30分执行: ```java import org.quartz.CronScheduleBuilder; import org....

    quartz quartz-1.8.6 dbTables 建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,使得开发者可以方便地定义、安排和管理各种任务。版本1.8.6是Quartz的一个稳定版本,它包含了对数据库...

    quartz界面化持久化管理

    - 使用`org.quartz.CronTrigger`或`org.quartz.SimpleTrigger`根据需求设置触发规则,例如定时、周期性执行。 5. **界面化管理**: - 开发一个Web界面,通过HTTP请求与后台服务交互,实现任务的增删改查操作。 -...

    Java任务调度框架Quartz教程实例

    - **Scheduler(任务调度)**:这是Quartz中最核心的概念之一。Scheduler负责管理并调度Jobs和Triggers,它是Quartz框架的主控中心。通过Scheduler,我们可以注册JobDetail和Trigger,然后启动、暂停或停止它们。 - ...

    quartz-all.zip

    我们可以使用`org.quartz.CronTrigger`或`org.quartz.SimpleTrigger`来定义触发器。CronTrigger基于cron表达式,可以设置复杂的重复执行计划,而SimpleTrigger则用于简单的间隔执行。在Spring配置中,定义一个`org....

    Quartz 固定时间间隔计划+Calendar和Cron

    标题中的 "固定时间间隔计划" 指的是使用 Quartz 的 SimpleTrigger 类来设置间隔时间执行任务的方式,而 "Calendar 和 Cron" 提到了另外两种时间触发器,它们提供了更复杂的调度策略。 1. **SimpleTrigger**: ...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    此外,Quartz还支持Cron表达式和SimpleTrigger等不同类型的触发器,以满足各种复杂的定时需求。 `quartz-all-1.6.0.jar`则是一个包含所有依赖项的完整版本,它除了包含`quartz-1.6.0.jar`中的核心组件外,还集成了...

    关于spring中quartz的配置

    Trigger是触发Job执行的时间规则,可以是简单触发器(SimpleTrigger)或者cron触发器(CronTrigger)。CronTrigger允许你用cron表达式定义触发时间。例如: ```java CronTrigger trigger = TriggerBuilder.newTrigger...

    quartz3种调度形式+传参.zip

    Quartz是一款强大的任务调度框架,广泛应用于Java领域,可以实现定时任务的自动化执行。它提供了丰富的API和灵活性,使得开发者可以轻松地定义和管理各种定时任务。本资料主要探讨了Quartz的三种调度形式以及在...

    quartz.jar包下载

    5. **丰富的触发器类型**:除了CronTrigger,Quartz还提供了SimpleTrigger、CalendarIntervalTrigger等多种触发器类型,满足不同类型的定时需求。 使用Quartz.jar的基本步骤如下: 1. **下载与导入**:首先你需要...

    quartz和spring-quartz

    Quartz提供了多种Trigger类型,如SimpleTrigger(简单触发器)用于一次性或间隔执行,CronTrigger(cron触发器)则可以按照预定义的cron表达式周期性执行。 3. **Scheduler**: Scheduler是整个框架的管理者,它负责...

    Quartz.net-定时任务 Demo

    Quartz.NET提供了多种类型的Trigger,如SimpleTrigger(简单触发器)和CronTrigger(CRON触发器)。对于"几十分钟后执行"的需求,可以使用SimpleTrigger: ```csharp var trigger = new SimpleTriggerImpl(...

    Quartz所需jar包

    4. **定义Trigger**:`Trigger`决定`Job`何时被执行,可以选择不同类型的Trigger,如SimpleTrigger、CronTrigger等,来指定精确的执行时间或周期。 5. **调度Job**:将`JobDetail`和`Trigger`关联并添加到`...

    quartz实例,quartz入门例子

    Quartz提供了多种类型的Trigger,如SimpleTrigger(简单触发器)和CronTrigger(基于CRON表达式的触发器)。 3. **Scheduler**:调度器,负责管理和执行Jobs及Triggers。通过`org.quartz.Scheduler`接口与Quartz交互...

    Quartz.net 3.0.7.0数据库持久化.rar

    var trigger = new SimpleTrigger("myTrigger", "myGroup", DateTimeOffset.Now.AddSeconds(5), TimeSpan.FromSeconds(10)); scheduler.ScheduleJob(new JobDetail("myJob", "myGroup", typeof(MyJob)), trigger); `...

    Quartz开发使用说明文档

    * 触发器:Quartz提供了多种触发器,包括SimpleTrigger、CronTrigger、DailyTimeIntervalTrigger等。 * Quartz 表:Quartz提供了多种表,包括qrtz_job_details、qrtz_triggers等。 * 依赖注入:Quartz支持依赖注入,...

    深入解读Quartz的原理

    Quartz 支持多种类型的触发器,如 `SimpleTrigger`(用于简单的重复任务)和 `CronTrigger`(基于类似于 UNIX cron 表达式的复杂任务)。 4. **Scheduler**:是一个调度容器,负责管理 `JobDetail` 和 `Trigger` 的...

    C#Quartz定时任务

    Quartz.NET提供了多种Trigger类型,如SimpleTrigger、CronTrigger等。SimpleTrigger用于按固定间隔重复执行,而CronTrigger则可以基于cron表达式实现更复杂的时间计划。 3. **Scheduler**:Scheduler是整个定时任务...

Global site tag (gtag.js) - Google Analytics