quartz2与springmvc集成的2种方式
第一种方式:jobDetail使用MethodInvokingJobDetailFactoryBean
(1)spring配置
<!-- 定时任务Bean: quartz获取不到注解的userService, 使用xml文件再配一个UserService对象set注入Job -->
<bean id="myJob" class="cn.mgr.job.demo.MyJob">
<property name="userService" ref="_userService"></property>
</bean>
<bean id="_userService" class="cn.mgr.user.service.UserService"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject" ref="myJob" />
<!-- 调用类中的方法 -->
<property name="targetMethod" value="execute" />
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="false" />
</bean>
<!-- quartz-2.x后的配置 -->
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- 总管理类:如果lazy-init='false',那么容器启动后就会执行调度程序 -->
<!-- 如果lazy-init='true',则需要实例化该bean才能执行调度程序 -->
<bean name="simpleScheduler" lazy-init="true" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger" />
</list>
</property>
<property name="autoStartup" value="true"/>
</bean>
(2)Job
public class MyJob {
private IUserService userService;
public void execute(){
System.out.println((new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS")).format(new Date()));
System.out.println(userService.getMessage() + "%S%%");
}
public void setUserService(IUserService userService) {
this.userService = userService;
}
}
第二种方式:jobDetail使用org.springframework.scheduling.quartz.JobDetailFactoryBean
(1)spring配置
<bean id="roleService2" class="cn.mgr.role.service.RoleService"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="simpleJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 调用的类
<property name="targetObject" ref="simpleJob" />-->
<!-- 调用类中的方法
<property name="targetMethod" value="execute" /> -->
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程
<property name="concurrent" value="false" />-->
<property name="jobClass" value="cn.mgr.job.demo.SimpleJob" />
<property name="group" value="TEST" />
<property name="durability" value="true" />
</bean>
<!-- quartz-2.x后的配置 -->
<bean id="simpleJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="simpleJobDetail" />
</property>
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- 总管理类:如果lazy-init='false',那么容器启动后就会执行调度程序 -->
<!-- 如果lazy-init='true',则需要实例化该bean才能执行调度程序 -->
<bean name="simpleScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleJobTrigger" />
</list>
</property>
<!-- <property name="autoStartup" value="true"/> -->
<!-- 延迟30秒启动Scheduler -->
<property name="startupDelay" value="20"></property>
<!-- 通过applicationContextSchedulerContextKey属性配置spring上下文 -->
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
<!-- <property name="dataSource" ref="dataSource" /> -->
<property name="schedulerContextAsMap">
<map>
<!-- spring 管理的service需要放到这里,才能够注入成功 -->
<description>schedulerContextAsMap</description>
<entry key="roleService2" value-ref="roleService2"/>
<entry key="userService" value-ref="userService"/>
</map>
</property>
<!-- <property name="configLocation" value="classpath:quartz.properties" /> -->
</bean>
(2)Job
public abstract class Job extends QuartzJobBean{
protected void init(JobExecutionContext context){
Scheduler scheduler = (Scheduler) context.getScheduler();
DataSource dataSource = null;
//获取JobExecutionContext中的service对象
SchedulerContext schCtx = null;
try {
schCtx = context.getScheduler().getContext();
} catch (SchedulerException e) {
e.printStackTrace();
}
//获取Spring中的上下文
ApplicationContext appCtx = (ApplicationContext)schCtx.get(Const.APPLICATION_CONTEXT);
//sqlSessionFactory = (SqlSessionFactory)appCtx.getBean(Const.SQL_SESSION_FACTORY);
dataSource = (DataSource)appCtx.getBean(Const.DATA_SOURCE);
System.out.println("**** ds = "+ dataSource);
Object o = appCtx.getBean("roleService2");
System.out.println("**** roleService = "+ o);
Object userService = appCtx.getBean("userService");
System.out.println("**** userService = "+ userService);
}
}
public class SimpleJob extends Job{
private IRoleService roleService;
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
init(context);
System.out.println("roleService=" + roleService);
}
}
相关推荐
总结来说,SpringMVC 与 Quartz 的结合提供了一种强大的解决方案,可以轻松地在 Web 应用程序中实现复杂的定时任务管理。这种结合充分利用了 Spring 的优点,如依赖注入和面向切面编程,同时也利用了 Quartz 的强大...
Quartz与Spring的集成使得任务的生命周期管理和并发控制变得更加便捷。 结合以上组件,开发者可以创建一个具有强大定时任务功能的系统。例如,可以使用Spring的ApplicationContext来初始化Quartz的Scheduler,然后...
说明:参考了公司的一些项目以及springside,集成了一些常用框架,特色功能如下: shiro: 1.支持shiro数据库配置权限。 2.支持在方法级别上控制权限。 quartz: 1.页面配置Trigger以及选择Job任务来开启定时器。 2...
本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...
"Mybatis+Spring+SpringMVC+quartz多数据源切换"的架构设计就是为了满足这样的场景。这个项目结合了四个关键的技术组件,它们分别是Mybatis、Spring、SpringMVC和Quartz,下面将详细介绍这些技术以及它们在多数据源...
主流的spring4mvc+Mybatis,并整合了axis2实现webservice接口开发。利用quartz注解实现任务作业功能源码。利用spring RoutingDataSource实现动态数据源切换
本人搭建的ssm框架的maven web项目,用maven管理项目的jar包,项目架构搭好,用的都是现阶段最新的jar包,整合了log4j日志,redis缓存,quartz定时任务,全局配置文件在代码中使用等,controller层/service层/bo层/dao层都...
通过以上介绍,我们可以看到Spring MVC、MyBatis 和 Quartz 的集成可以创建一个强大且灵活的后台系统,能够满足复杂的任务调度需求。这三者之间的协同工作,使得开发者可以专注于业务逻辑,而不用过于关心底层的调度...
对于动态定时任务,Quartz提供了一种灵活的方式,允许在运行时添加、修改或删除任务。例如,可以创建一个服务接口,通过调用该接口来动态调整Trigger,从而达到改变任务执行频率或暂停任务的目的。 Quartz的集群...
Quartz可以通过与Spring的集成,实现任务调度的声明式管理,简化了在Spring应用中添加定时任务的过程。 **整合步骤** 1. **引入依赖** 首先,你需要在项目中引入Spring和Quartz的jar包。"spring3.1 与 quartz ...
在Spring MVC框架中集成Quartz定时任务是一项常见的需求,它允许开发者在特定时间点执行一些周期性的业务逻辑。Quartz是一个强大的、完全开源的作业调度框架,可以与Java应用程序无缝结合,提供灵活的任务调度功能。...
包含Spring4.1.1_SpringMVC4_Hibernate4.3.6_Proxool0.9.1_Quartz2.2.1_Jackson2.5.0_Plupload2.1.2的集成 包含集成完整实例代码,代码中具备详细中文注释。详情可参考博客: ...
Quartz可以方便地与Spring集成,通过Spring的Job和Trigger接口来定义和管理任务。 在实际项目中,这四个框架通常会协同工作。Spring作为基础框架,负责整个应用的结构和依赖管理;Spring MVC处理Web请求和响应,...
本主题聚焦于如何使用Spring3 MVC与Hibernate进行整合,以便更好地处理业务逻辑和数据持久化,并结合Axis2发布Web服务,同时利用Quartz进行任务调度。以下将详细介绍这些技术及其整合过程。 **Spring3 MVC** 是...
Quartz可以与Spring框架深度集成,通过Spring的JobDetail和Trigger定义,轻松地创建和管理定时任务。 整合这些技术,我们通常会遵循以下步骤: 1. 配置Spring:首先,我们需要在Spring配置文件中定义Bean,包括...
SSM(Spring、SpringMVC、MyBatis)框架与Quartz的集成是Java开发中常见的一种实现定时任务的方法。Quartz是一个强大的开源作业调度框架,可以用来执行定时任务,而SSM作为主流的Java Web开发框架,为业务逻辑处理...
《Maven项目:springMVC、Mybatis、Axis2与Task整合详解》 在现代Java开发中,Maven作为项目构建工具,springMVC作为Web层框架,Mybatis作为持久层框架,Axis2用于服务发布,而Task则涉及到任务调度。这些技术的...
当需要在Quartz作业中调用由Spring管理的服务时,会出现依赖注入的问题,因为Quartz的工作线程与Spring的ApplicationContext不一致。 为了解决这个问题,我们需要以下步骤: 1. **配置Spring上下文**:首先,在...
搭建一个基于SpringMVC、Mybatis、Quartz、Log4j和Maven的项目涉及到多个技术栈的集成与配置,这是一个常见的Java Web开发框架。以下将详细解释这些技术及其在项目中的作用,以及如何进行集成。 **SpringMVC**: ...
Spring框架以其强大的功能和灵活的扩展性,成为Java开发的首选,而Quartz作为一款开源的作业调度库,能够很好地与Spring集成,提供定时任务的解决方案。本教程将详细讲解如何利用Spring 4.3.15、Spring MVC 4.3.15和...