码迷,mamicode.com
首页 > 编程语言 > 详细

Spring整合quartz实现定时任务

时间:2015-08-25 21:49:22      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:spring   quartz   


quartz比timer的功能更强大,结合spring可以简化quartz的配置来实现定时任务。


1 导入包:quartz-all.jar


2 创建定时执行的任务类(类名可以是普通类名);

package com.web.quartz;

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

public class Task {
	public void execute(){		
		String now=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
		System.out.println(now+"------------------------------计算工资");
		
	}
}


3 在spring的applicationContext.xml创建任务类的bean;

4 在spring中配置spring对quartz支持的任务工厂bean,在属性里引入上面的任务bean和要执行的方法;

5 在spring里配置触发器bean,引入上面的任务工厂bean.spring提供了两种触发器,SimpleTriggerBean和CronTriggerBean前者用来执行循环任务后者用来执行定时任务。

6 在spring中创建启动任务的bean。设置 lazy-init="false" 在容器启动的时候就会执行监控执行任务。


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
		http://www.springframework.org/schema/tx
	    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd		
		http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:component-scan base-package="com.*" /> 
	<context:annotation-config /> 
	<!-- <tx:annotation-driven transaction-manager="txManager"/> -->
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:c3p0.properties</value>
		</property>
	</bean>
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${driverClass}"></property>
		<property name="jdbcUrl" value="${jdbcUrl}"></property>
		<property name="user" value="${user}"></property>
		<property name="password" value="${password}"></property>
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="packagesToScan">
			<list>
				<value>com.web.entity</value>
				
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>

	</bean>
	
	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="find*" read-only="true" />
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>
  <aop:config>
  	<aop:pointcut id="fooServiceOperation" expression="execution(public * com.web.service..*.*(..))"/>
  	<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
  </aop:config>
  
  <bean id="task" class="com.web.quartz.Task"></bean>
  <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  	<property name="targetObject" ref="task"></property>
  	<property name="targetMethod" value="execute"></property>
  </bean>
<!--   <bean id="simpleTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  	<property name="jobDetail" ref="methodInvokingJobDetail"></property>
  	<property name="startDelay" value="1000"></property>
  	<property name="repeatInterval" value="1000"></property>
  	<property name="repeatCount" value="10"></property>
  </bean> -->
  <bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
  	<property name="jobDetail" ref="methodInvokingJobDetail"></property>
  	<property name="cronExpression" value="0 30 19 * * ? *"></property>
  </bean>
  <bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
  lazy-init="false" autowire="no">
  	<property name="triggers">
  		<list>
  			<ref bean="cronTriggerBean"/>
  		</list>
  	</property>
  </bean>
</beans>

simpleTriggerBean的执行计划是:一秒后开始执行,每个一秒执行一次,执行10次;

cronTriggerBean的执行计划是:每天19:30都会执行一次。


对于cronTriggerBean的执行计划:


格式: [] [] [小时] [] [] [] []

序号

说明

是否必填

允许填写的值

允许的通配符

1

0-59 

, - * /

2

0-59

, - * /

3

小时

0-23

, - * /

4

1-31

, - * ? / L W

5

1-12 or JAN-DEC

, - * /

6

1-7 or SUN-SAT

, - * ? / L #

7

empty 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:10和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年至2005年的每月的最后一个星期五上午10:15触发


"0 15 10 ? * 6#3"                            每月的第三个星期五上午10:15触发




































Spring整合quartz实现定时任务

标签:spring   quartz   

原文地址:http://blog.csdn.net/liangwenmail/article/details/47981833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!