spring定时任务

spring他本身自带了定时任务的管理功能,就是spring-task

spring-task本身是轻量级的,实现的功能也简单一点没有spring-quartz强大,但是简单的定时任务的需求都是可以满足的。

实现,

首先需要配置需要的标签库:

 xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/task 
    http://www.springframework.org/schema/task/spring-task-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"
  xmlns:task="http://www.springframework.org/schema/task"
  xmlns:context="http://www.springframework.org/schema/context"

其中主要是带task和context的

<bean name="gjyrkJob" class="com.lzdf.spw.sp.task.GjyrkJob" />
  
  <task:scheduled-tasks>   
        <task:scheduled ref="gjcrkJob" method="initGjc" cron="0 30 1 * * ?"/>   
        <task:scheduled ref="gjyrkJob" method="initGjy" cron="0 1 1 * * ?"/> 
  </task:scheduled-tasks>  
  
  <task:annotation-driven/>
  <context:component-scan base-package=" com.lzdf.spw.sp.task " /> 
注入具体执行任务就可以了,其中<task: scheduled ref="执行任务类" method="具体的方法" cron="开始执行时间"/>

public class GjyrkJob {

	public void initGjy() {
		try {
			System.out.println("任务开始>........"+ new Date());
			// 业务逻辑代码调用
			List<Gjycxmx> jjrks = gjybhlyService.getJjrksj();
			int size = jjrks.size();
			while(size !=0){
				gjybhlyService.bhrk(jjrks);
				jjrks = null;
				jjrks = gjybhlyService.getJjrksj();
				size = jjrks.size();
			}
			
			/*if(jjrks.size()<5000){
				gjcbhlyService.bhrk(jjrks);
			}else{
				//拆分数据五千条为一个list
				List<List<Gjccxmx>> cfjgs = GjcrkJob.createList(jjrks, 2000);
				for(int i=0;i<cfjgs.size();i++){
					List<Gjccxmx> temp = cfjgs.get(i);
					gjcbhlyService.bhrk(temp);
				}
			}*/
			
			System.out.println("任务结束!"+ new Date());
		} catch (Exception e) {
			System.out.println("任务出现异常");
		}
	}
	
}

在简单介绍一下spring-quartz,首先quartz需要几个包spring-context-support、quartz。用maven

的话配置为

<groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>3.2.13.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>1.7.3</version>
    </dependency>
    <dependency>

spring的配置

<bean id="methodInvokingJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="gjcrkJob" /> <!-- 具体的类 -->
		</property>
		<property name="targetMethod">
			<value>initGjc</value> <!--具体的方法-->
		</property>
  </bean>
  
  
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        这里不可以直接在属性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">
		添加触发器
		<property name="triggers">
			<list>
				<ref local="cronTrigger" />
			</list>
		</property>
  </bean> 
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
    <property name="triggers">  
      <list>  
        <ref bean="cronTrigger"/>  
      </list>  
    </property>  
  </bean>

启动时间的设置

cronExpression的配置说明,具体使用以及参数请百度google
字段   允许值   允许的特殊字符
秒    0-59    , - * /
分    0-59    , - * /
小时    0-23    , - * /
日期    1-31    , - * ? / L W C
月份    1-12 或者 JAN-DEC    , - * /
星期    1-7 或者 SUN-SAT    , - * ? / L C #
年(可选)    留空, 1970-2099    , - * / 
- 区间  
* 通配符  
? 你不想设置那个字段
下面只例出几个式子
 
CRON表达式    含义 
"0 0 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分每分钟一次触发 
"0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发 
"0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 
"0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发 
"0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发 
"0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发


你可能感兴趣的:(spring)