Spring Trigger

很多时候有一些事情需要交给程序定时自动执行,java项目中使用spring+Quartz的方式实现这个功能的方式很常见,下面说明一下具体配置。

 

一、工程需要的jar包

1)  aopalliance-1.0.jar

2)  commons-logging-1.1.1.jar

3)  log4j-1.2.11.jar

4)  quartz-2.1.7.jar

5)  slf4j-api-1.7.3.jar

6)  slf4j-log4j12-1.7.3.jar

7)  spring-aop-3.2.3.RELEASE.jar

8)  spring-beans-3.2.3.RELEASE.jar

9)  spring-context-3.2.3.RELEASE.jar

10)             spring-context-support-3.2.3.RELEASE.jar

11)             spring-core-3.2.3.RELEASE.jar

12)             spring-expression-3.2.3.RELEASE.jar

13)             spring-tx-3.2.3.RELEASE.jar

14)             spring-web-3.2.3.RELEASE.jar

二、工程目录结构

Spring Trigger_第1张图片

三、配置文件说明

1、  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<!-- 配置spring配置文件加载的位置 -->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:application/application_spring_trigger.xml</param-value>  
    </context-param>  
    
    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
    
    <welcome-file-list>
    	<welcome-file>index.html</welcome-file>
  	</welcome-file-list>

</web-app>

2、  spring配置文件(application_spring_trigger.xml)

Quartz 2.x修改了部分API,所以需要注意一下Quartz的配置。

  • 将CronTriggerBean改为了CronTriggerFactoryBean
  • 将JobDetailBean改为了JobDetailFactoryBean
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean name="taskJob" class="com.spring.trigger.test.SpringTriggerTest" />

    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
       <!-- 执行定时任务的类 -->
           <ref bean="taskJob" />
       </property>
       <property name="targetMethod">
       <!-- 指定定时任务的具体方法,由哪个方法执行定时任务 -->
           <value>test</value>
       </property>
    </bean>
    
    <!-- 配置触发器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->
       <property name="jobDetail">
           <ref bean="methodInvokingJobDetail" />
       </property>
       <!-- 每天的8点到21点每隔1分钟触发,具体说明见附录 -->
       <property name="cronExpression">
           <value>0 * 08-21 * * ?</value>
       </property>
    </bean>

	<!-- 添加触发器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <!-- 程序启起来后,延迟60秒再开始执行 -->
       <property name="startupDelay" value="60"/>
       <property name="triggers">
           <list>
              <ref local="cronTrigger" />
           </list>
       </property>
    </bean>

</beans>

四、定时任务执行类(SpringTriggerTest.java)

package com.spring.trigger.test;

import java.util.Date;

/**
 * @author Administrator
 *spring trigger  test
 */
public class SpringTriggerTest {

	public  void test()
	{
		Date date=new Date();
		String dateStr=date.toLocaleString();
		System.out.println("执行定时任务方法!"+dateStr);
	}
}




你可能感兴趣的:(spring)