# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
以上是quartz-2.2.3的quartz.properties的配置文件.加了注释之后:
# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#
#配置主调度器属性
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
#配置线程池
#Quartz线程池的实现类
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
# 线程池的线程数量
org.quartz.threadPool.threadCount: 10
# 线程池里线程的优先级
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
#配置作业存储
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
接下来再看一下quartz-1.8.6的quartz.properties的配置文件.
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck = true
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 12
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.dataSource = myDS
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.isClustered = false
#============================================================================
# Configure Datasources
#============================================================================
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5
添加注释之后再看看
#============================================================================
# Configure Main Scheduler Properties 配置主调度器属性
#============================================================================
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck = true
#============================================================================
# Configure ThreadPool 配置线程池 Quartz线程池的实现类
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
#=============================================================================
# 线程池的线程数量 线程里线程的优先级
#=============================================================================
org.quartz.threadPool.threadCount = 12
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore 配置作业存储
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.dataSource = myDS
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.isClustered = false
#============================================================================
# Configure Datasources
#============================================================================
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5
import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class TestJob implements Job{ /* * execute方法体是被调度的作业体 * (non-Javadoc) * @see org.quartz.Job#execute(org.quartz.JobExecutionContext) */ //判断作业是否执行的旗标 private boolean isRunning = false; @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub //如果作业没有被调度 if(!isRunning) { System.out.println(new Date() + " 作业被调度。 "); //循环100次来模拟任务的执行 for (int i = 0; i < 100; i++) { System.out.println("作业完成" + (i+1) + "%"); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(new Date() + " 作业调度结束。 "); } //如果作业正在运行,即使获得调度,也立即退出 else{ System.out.println(new Date() + "任务退出"); } } }
import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; public class MyQuartzServer { public static void main(String[] args) { MyQuartzServer server = new MyQuartzServer(); try { server.startScheduler(); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //执行调度 private void startScheduler() throws SchedulerException{ //使用工厂创建调度器实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //以作业创建JobDetail实例 JobDetail jobDetail= new JobDetail("dd",Scheduler.DEFAULT_GROUP,TestJob.class); //创建trigger,创建一个简单的调度器 //指定该任务被重复调度50次,每次间隔20秒 Trigger trigger = new SimpleTrigger("dd",Scheduler.DEFAULT_GROUP,50,20000); //调度器将作业与trigger关联起来 scheduler.scheduleJob(jobDetail, trigger); //开始调度 scheduler.start(); } }
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Sun Nov 12 17:19:08 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:19:18 CST 2017 作业调度结束。 Sun Nov 12 17:19:28 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:19:38 CST 2017 作业调度结束。 Sun Nov 12 17:19:48 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:19:58 CST 2017 作业调度结束。 Sun Nov 12 17:20:08 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:20:18 CST 2017 作业调度结束。 Sun Nov 12 17:20:28 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:20:38 CST 2017 作业调度结束。 Sun Nov 12 17:20:48 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:20:58 CST 2017 作业调度结束。 Sun Nov 12 17:21:08 CST 2017 作业被调度。 作业完成1% 作业完成2% 作业完成3% 作业完成4% 作业完成5% 作业完成6% 作业完成7% 作业完成8% 作业完成9% 作业完成10% 作业完成11% 作业完成12% 作业完成13% 作业完成14% 作业完成15% 作业完成16% 作业完成17% 作业完成18% 作业完成19% 作业完成20% 作业完成21% 作业完成22% 作业完成23% 作业完成24% 作业完成25% 作业完成26% 作业完成27% 作业完成28% 作业完成29% 作业完成30% 作业完成31% 作业完成32% 作业完成33% 作业完成34% 作业完成35% 作业完成36% 作业完成37% 作业完成38% 作业完成39% 作业完成40% 作业完成41% 作业完成42% 作业完成43% 作业完成44% 作业完成45% 作业完成46% 作业完成47% 作业完成48% 作业完成49% 作业完成50% 作业完成51% 作业完成52% 作业完成53% 作业完成54% 作业完成55% 作业完成56% 作业完成57% 作业完成58% 作业完成59% 作业完成60% 作业完成61% 作业完成62% 作业完成63% 作业完成64% 作业完成65% 作业完成66% 作业完成67% 作业完成68% 作业完成69% 作业完成70% 作业完成71% 作业完成72% 作业完成73% 作业完成74% 作业完成75% 作业完成76% 作业完成77% 作业完成78% 作业完成79% 作业完成80% 作业完成81% 作业完成82% 作业完成83% 作业完成84% 作业完成85% 作业完成86% 作业完成87% 作业完成88% 作业完成89% 作业完成90% 作业完成91% 作业完成92% 作业完成93% 作业完成94% 作业完成95% 作业完成96% 作业完成97% 作业完成98% 作业完成99% 作业完成100% Sun Nov 12 17:21:18 CST 2017 作业调度结束。
第一个考勤作业:PunchJob。系统每天为员工自动插入两次“旷工”考勤记录,而每次员工实际打卡时将会修改对应的考勤记录。
package org.crazyit.hrsystem.schedule; import org.crazyit.hrsystem.service.EmpManager; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class PunchJob extends QuartzJobBean{ //判断作业是否执行的旗标 private boolean isRunning = false; //该作业类所依赖的业务逻辑组件 private EmpManager empMgr; public void setEmpMgr(EmpManager empMgr) { this.empMgr = empMgr; } @Override protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { // TODO Auto-generated method stub if(!isRunning){ System.out.println("开始调度自动打卡"); isRunning = true; //调用业务逻辑方法 empMgr.autoPunch(); isRunning = false; } } }
第二个是工资结算作业:PayJob。该作业在每月3日自动结算每个员工上个月的工资。
package org.crazyit.hrsystem.schedule; import org.crazyit.hrsystem.service.EmpManager; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class PayJob extends QuartzJobBean{ //判断作业是否执行的旗标 private boolean isRunning = false; //该作业类所依赖的业务逻辑组件 private EmpManager empMgr; public void setEmpMgr(EmpManager empMgr) { this.empMgr = empMgr; } //定义任务执行体 @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub if(!isRunning){ System.out.println("开始调度自动结算工资"); isRunning = true; //调用业务逻辑方法 empMgr.autoPay(); isRunning = false; } } }
10.6 实现系统Web层
ActionSupport是需要导入xwork-2.1.1.jar包才可以.