第1章 ssm 整合 quartz (解决了无法注入service问题)

本文档提供了一个详细的教程,展示了如何在SSM(Spring、SpringMVC、MyBatis)项目中整合Quartz定时任务框架,并解决了在Quartz中无法注入Service的问题。内容包括简单项目整合流程、不同触发器的配置以及时间配置的参考。

代码下载: http://download.csdn.net/detail/bird73/9859199

第1章 ssm 整合 quartz (解决了无法注入service问题)

1.1.2 简单项目整合流程

 1.  导入jar

log4j-1.2.17.jar

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-context-support-3.2.0.RELEASE.jar

spring-tx-3.2.0.RELEASE.jar

quartz-all-1.8.6.jar

slf4j-api-1.7.5.jar

slf4j-log4j12-1.7.5.jar

 

2  创建 JobFactory.java

 

package com.shop.user.util;

 

import org.quartz.spi.TriggerFiredBundle;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.config.AutowireCapableBeanFactory;

import org.springframework.scheduling.quartz.AdaptableJobFactory;

 

/**

 * Created by dupang on 2016/11/14.

 */

public class JobFactoryextends AdaptableJobFactory {

 

    //这个对象Spring会帮我们自动注入进来,也属于Spring技术范畴.

    @Autowired

    private AutowireCapableBeanFactory capableBeanFactory;

 

    protected Object createJobInstance(TriggerFiredBundlebundle) throws Exception {

        //调用父类的方法

        Object jobInstance =super.createJobInstance(bundle);

        //进行注入,这属于Spring的技术,不清楚的可以查看Spring的API.

        capableBeanFactory.autowireBean(jobInstance);

        return jobInstance;

    }

}

 

 

5 创建MyUserJob.java

Ø 注意:  此类中主要有两个属性,分别完成了注入

Ø 注意:  此类中executeInternal() 方法  中完成Dao层数据的调用  (Dao层代码,请参考示例项目)

package com.shop.user.action;

 

import java.util.List;

 

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

 

import com.shop.user.pojo.User;

import com.shop.user.service.UserService;

 

public class MyUserJobextends QuartzJobBean {

 

private Stringname;

 

public String getName() {

return name;

}

 

public void setName(Stringname) {

this.name =name;

}

 

private UserServiceuserService;

 

public UserService getUserService() {

return userService;

}

 

public void setUserService(UserServiceuserService) {

this.userService =userService;

}

 

@Override

protected void executeInternal(JobExecutionContextcontext) throws JobExecutionException {

 

System.out.println("name : " +name);

System.out.println("userService : " +userService);

List<User> list =userService.getAllUserList(new User());

for (Useruser : list) {

System.out.println("user-->:" +user);

}

}

 

}

 

 

3   applicationContext.xml

 

<!-- 定时任务的factorybean,配置其他config -->

<bean id="jobFactory" class="com.shop.user.util.JobFactory"></bean>

<bean id="userService" class="com.shop.user.service.impl.UserServiceImpl"></bean>

 

<!-- 配置job -->

<bean id="remindJob" class="org.springframework.scheduling.quartz.JobDetailBean">

<!-- 指定 jobClass是RemindJob -->

<property name="jobClass" value="com.shop.user.action.MyUserJob"></property>

<!-- 指定任务数据 -->

<property name="jobDataAsMap">

<map>

<entry key="name" value="tom"></entry>

<entry key="userService" value-ref="userService"></entry>

</map>

</property> 

</bean>

 

<!-- 配置触发器 -->

<bean id="myTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">

<!-- 配置JobDetail -->

<property name="jobDetail" ref="remindJob"></property>

<!-- 配置启动后延迟时间1s -->

<property name="startDelay" value="3000"></property>

<!-- 配置重复执行的时间间隔3s -->

<property name="repeatInterval" value="5000"></property>

</bean>

<!--另一种 触发器  :Cron触发器

<bean name="myCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

           配置JobDetail

    <property name="jobDetail" ref="remindJob"></property>

             配置Cron表达式

    <property name="cronExpression" value="0/10 * * ? * *"></property>

</bean>

-->

 

 

<!-- 配置调度器 -->

<bean name="MyScheduler"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<!-- 其他属性省略 -->

<property name="jobFactory" ref="jobFactory"></property>

<property name="triggers">

<list>

<!-- 指定触发器 -->

<ref bean="myTrigger" />

<!-- 可以在这里添加其他的触发器 -->

<!-- <ref bean="myCronTrigger" /> -->

</list>

</property>

</bean>

 

启动项目  可以间隔5秒 调用一次方法了

 

1.1.3  另一种 触发器

1  该触发器可以完成指定某时间触发,每天上午10:15触发 /  "0 15 10 * * ?"

 

<!--  配置Cron触发器  -->

<bean name="myCronTrigger"   class="org.springframework.scheduling.quartz.CronTriggerBean">

    <!-- 配置JobDetail -->

    <property name="jobDetail" ref="remindJob"></property>

    <!-- 配置Cron表达式-->

    <property name="cronExpression" value="0/10 * * ? * *"></property>

</bean>

 


1.1.4  时间配置参考 

时间配置:

"0/10 * * * * ?" 每10秒触发

"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触发 

每隔5秒执行一次:*/5 * * * * ? 

每隔1分钟执行一次:0 */1 * * * ? 

每天23点执行一次:0 0 23 * * ? 

每天凌晨1点执行一次:0 0 1 * * ? 

每月1号凌晨1点执行一次:0 0 1 1 * ? 

每月最后一天23点执行一次:0 0 23 L * ? 

每周星期天凌晨1点实行一次:0 0 1 ? * L 

在26分、29分、33分执行一次:0 26,29,33 * * * ? 

每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

 

 

 

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值