一、jar 包 quartz 1.5.2.jar
參考文檔:http://www.blogjava.net/baoyaer/articles/155645.html
二、quartz實現
1.關鍵API
- Scheduler - 與scheduler交互的主要API;
- Job - 你通過scheduler執行任務,你的任務類需要實現的接口;
- JobDetail - 定義Job的實例;
- Trigger - 觸發Job的執行;
- Calendar - 日曆指定時間點的集合,annualCalendar、monthlyCalendar、weeklyCalendar 對每年、每月、每週的定義
job代碼實現
<span style="background-color: rgb(255, 204, 51);">定時任務實現</span>
public static void main(String[] args)
{
try
{
//①創建一個JobDetail實例,指定Job
JobDetail jobDetail = new JobDetail("job1", "jGroup1",UploadKeywordJob.class);
//②通過CronTrigger定義調度規則:每天幾點上傳
CronTrigger cronTrigger = new CronTrigger("trigger1","tGroup1");
cronTrigger.setCronExpression("0 0 9 ? * *");
//③通過SchedulerFactory獲取一個調度器實例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//④ 註冊並進行調度
scheduler.scheduleJob(jobDetail, cronTrigger);
//⑤調度啓動
scheduler.start();
//*
}
catch (Exception se)
{
se.printStackTrace();
}
}
注:對於上面*號處讓主線程睡眠原因沒搞清楚,試過不加正常運行
使用Calendar,排除特定日期
①法定節日是以每年爲週期的,所以使用AnnualCalendar
AnnualCalendar holidays = new AnnualCalendar();
②五一勞動節
Calendar laborDay = new GregorianCalendar();
laborDay.add(Calendar.MONTH,5);
laborDay.add(Calendar.DATE,1);
holidays.setDayExcluded(laborDay, true); ②-1:排除的日期,如果設置爲false則爲包含
③國慶節
Calendar nationalDay = new GregorianCalendar();
nationalDay.add(Calendar.MONTH,10);
nationalDay.add(Calendar.DATE,1);
holidays.setDayExcluded(nationalDay, true);③-1:排除該日期
scheduler.addCalendar("holidays", holidays, false, false);④向Scheduler註冊日曆
二、spring的定時任務的實現
1.spring中的quartz
- <!-- Timer schedule -->
- <!--要調度的對象-->
- <bean id="jobBean" class="net.xsbiz.common.MakeHtml" />
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="jobBean" />
- <property name="targetMethod" value="execute" />
- <!--將併發設置爲false-->
- <property name="concurrent" value="false" />
- </bean>
- <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="jobDetail" />
- <!--表達式,我的是每 30 執行一次-->
- <property name="cronExpression" value="0/30 * * * * ?" />
- </bean>
- <!-- 總管理類如果將lazy-init='false'那麼容器啓動就會執行調度程序 -->
- <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
- <property name="triggers">
- <list>
- <!--作業調度器,list下可加入其他的調度器-->
- <ref bean="trigger" />
- </list>
- </property>
- </bean>
web.xml:
- <!-- 設置Spring的監聽,項目啓動時候初始化 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 指定Spring配置文件的路徑 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
- </context-param>
MakeHtml.java :
- //調用的類
- public class MakeHtml {
- //調用的方法
- public void execute(){
- //需要做的事情
- }
- public static void main(String[] args) {
- System.out.println("----begin---");
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- // 如果配置文件中將startQuertz bean的lazy-init設置爲false 則不用實例化
- context.getBean("startQuertz");
- System.out.print("----end---");
- }
- }