1. 程式人生 > >JAVA Maven專案如何實現定時任務

JAVA Maven專案如何實現定時任務

1在pom.xml檔案中加入如下資訊,引入對應的jar包。

<properties>
        <java.version>7</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <slf4j.version>1.7.5</slf4j.version>
        <spring.version>3.2.13.RELEASE</spring.version
> <springframework.version>3.0.5.RELEASE</springframework.version> </properties>
   <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${org.springframework-version}</version
>
<exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> <exclusion> <groupId>commons-beanutils</groupId
>
<artifactId>commons-beanutils</artifactId> </exclusion> <exclusion> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency>

2.在自己的web.xml檔案中引入監聽器

<init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:/dispatcher-servlet.xml</param-value>
    </init-param>

3建立定時任務的操作函式

package com.anran.webdesign.utils;

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

public class ExpireJobTask {

    public void doBiz() throws IOException
    {   
        System.out.println("執行時間是:"+new Date());
    }

}

4.在監聽器指定的xml檔案中引入定時任務

<!-- 執行緒執行器配置,用於任務註冊 -->
    <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10" />
        <property name="maxPoolSize" value="100" />
        <property name="queueCapacity" value="500" />
    </bean>
    <!-- 業務物件 -->
    <!-- ExpireJobTask是類名,doBiz是執行的實際方法 -->
    <bean id="bizObject" class="com.anran.webdesign.utils.ExpireJobTask" />
    <!-- 排程業務 -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="bizObject" />
        <property name="targetMethod" value="doBiz" />
    </bean>

    !-- 定時時間,此處為30分鐘執行一次-->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="cronExpression" value="0 0/30 * * * ?" />
    </bean> 
    <bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="startDelay" value="10000" />
        <property name="repeatInterval" value="60000" />
    </bean>

    <!-- 設定排程 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
        </list>
        </property>
        <property name="taskExecutor" ref="executor" />
    </bean>

附件:定時時間的格式(cronExpression表示式)

欄位 允許值 允許的特殊字元

秒 0-59 , – * /

分 0-59 , – * /

小時 0-23 , – * /

日期 1-31 , – * ? / L W C

月份 1-12 或者 JAN-DEC , – * /

星期 1-7 或者 SUN-SAT , – * ? / L C #

年(可選) 留空, 1970-2099 , – * /

表示式意義

"0 0 12 * * ?" 每天中午12點觸發

"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點到下午2:59期間的每1分鐘觸發

"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發

"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發

"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:102: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年至2005年的每月的最後一個星期五上午10:15觸發

"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發

每天早上60 6 * * *

每兩個小時

0 */2 * * *

晚上11點到早上8點之間每兩個小時,早上八點

0 23-7/28 * * *

每個月的4號和每個禮拜的禮拜一到禮拜三的早上110 11 4 * 1-3

11日早上40 4 1 1 *