spring quartz cron

該文章來源於網頁整理.

1.quartz.properties配置文件說明

在集羣中每個實例都必須有一個唯一的instanceId,但是應該有一個相同的instanceName
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO


定義線程池,SimpleThreadPool這個線程池只是簡單地在它的池中保持固定數量的線程,不增長也不縮小。但是它非常健壯且經過良好的測試,差不多每個Quartz用戶都使用這個池。
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3   最多只能有3個線程併發

一個觸發器被認定爲“misfired”之前,調度器所能容忍的毫秒數
org.quartz.jobStore.misfireThreshold = 60000

所有的Quartz數據,例如Job和Trigger的細節信息被存儲在內存(數據庫)中。
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.class = org.quartz.simpl.JDBCJobStore

JobStoreTX來讓Quartz幫你管理事務(這是最普遍的選擇)。
如果想讓Quartz同其他的事務協同工作(例如:J2EE應用服務器中的事務),那麼你需要使用JobStoreCMT,這樣,Quartz就會讓應用服務器容器來管理事務
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT

DriverDelegate負責做指定數據庫的所有JDBC工作.
如果數據庫沒有其他指定的代理,那麼就試用代理StdJDBCDelegate。
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

爲了指示JDBCJobStore所有的JobDataMaps中的值都是字符串,並且能以“名字-值”對的方式存儲而不是以複雜對象的序列化形式存儲在BLOB字段中,應設置值爲”true”(這是缺省的方式)。
org.quartz.jobStore.useProperties = true

配置數據源源的名數、據庫表前前綴
#org.quartz.jobStore.dataSource = myDS
#org.quartz.jobStore.tablePrefix = QRTZ_

是否集羣  負載均衡和容錯
#org.quartz.jobStore.isClustered = false

配置數據源
#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 =

如果Scheduler非常忙(比如,執行的任務數量差不多和線程池的數量相同,那麼你需要正確地配置DataSource的連接數量爲線程池數量+1)
#org.quartz.dataSource.myDS.maxConnections = 5


2.

spring定時任務之quartz

1) 編寫業務類,該類繼承了org.quartz.Job,主要的邏輯在execute方法中編寫

2) 配置spring的applicationContext.xml文件
    2.1 配置任務JobDetailBean
    2.2配置觸發器 CronTriggerBean

    2.3配置調度器  SchedulerFactoryBean


3 )所需要的jar包:
         spring.jar,quartz.jar,commons-logging-1.0.4.jar,commons-dbcp-1.2.2.jar,commons-pool-1.3.jar


4 )把quartz.properties放到類路徑下
  demo:

package task;

import java.util.Date;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Busine***eport implements org.quartz.Job{
   public void perform(){ //執行報表統計入口函數
         //業務邏輯
    System.out.println("開始執行報表的業務邏輯了----現在的時間是--"+new Date());

     }

 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  perform();

 }

}

applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!--  
 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ":/spring-beans.dtd">
-->
<beans>
 <bean id="busine***eport" class="task.Busine***eport" />

 


 <bean name="reportTask"
  class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="task.Busine***eport" />
 </bean>

 <!-- 觸發器 -->
 <bean id="cronTrigger"
  class="org.springframework.scheduling.quartz.CronTriggerBean">

  <!-- 指向我們的任務 -->
  <property name="jobDetail" ref="reportTask" />

  <!--  每天下午16點50分到55分,每分鐘運行一次 -->
  <property name="cronExpression" value="0 50-55 16 * * ?" />
 </bean>


 <!-- 調度器  -->
 <bean
  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <!--  觸發器列表 -->
    <ref bean="cronTrigger" />
   </list>
  </property>
  <property name="configLocation" value="classpath:quartz.properties" /> 
 </bean>



</beans>

3.
cronExpression表達式解釋:
0 0 12 * * ?---------------在每天中午12:00觸發 
0 15 10 ? * *---------------每天上午10:15 觸發 
0 15 10 * * ?---------------每天上午10:15 觸發 
0 15 10 * * ? *---------------每天上午10:15 觸發 
0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 觸發 
0 * 14 * * ?---------------每天在下午2:00至2:59之間每分鐘觸發一次 
0 0/5 14 * * ?---------------每天在下午2:00至2:59之間每5分鐘觸發一次 
0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之間的每5分鐘觸發一次 
0 0-5 14 * * ?---------------每天在下午2:00至2:05之間每分鐘觸發一次 
0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44時觸發 
0 15 10 ? * MON-FRI---------------從星期一至星期五的每天上午10:15觸發 
0 15 10 15 * ?---------------在每個月的每15天的上午10:15觸發 
0 15 10 L * ?---------------在每個月的最後一天的上午10:15觸發 
0 15 10 ? * 6L---------------在每個月的最後一個星期五的上午10:15觸發 
0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每個月的最後一個星期五的上午10:15觸發 
0 15 10 ? * 6#3---------------在每個月的第三個星期五的上午10:15觸發 
0 0 12 1/5 * ?---------------從每月的第一天起每過5天的中午12:00時觸發 
0 11 11 11 11 ?---------------在每個11月11日的上午11:11時觸發.­ 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章