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任务调度
说明:参考了公司的一些项目以及springside,集成了一些常用框架,特色功能如下: shiro: 1.支持shiro数据库配置权限。 2.支持在方法级别上控制权限。 quartz: 1.页面配置Trigger以及选择Job任务来开启定时器。 2...
spring+springMVC+mybatis+quartz动态定时任务
主流的spring4mvc+Mybatis,并整合了axis2实现webservice接口开发。利用quartz注解实现任务作业功能源码。利用spring RoutingDataSource实现动态数据源切换
本人搭建的ssm框架的maven web项目,用maven管理项目的jar包,项目架构搭好,用的都是现阶段最新的jar包,整合了log4j日志,redis缓存,quartz定时任务,全局配置文件在代码中使用等,controller层/service层/bo层/dao层都...
Mybatis+Spring+SpringMVC+quartz多数据源切换 定时任务 多数据库之间同步
包含Spring4.1.1_SpringMVC4_Hibernate4.3.6_Proxool0.9.1_Quartz2.2.1_Jackson2.5.0_Plupload2.1.2的集成 包含集成完整实例代码,代码中具备详细中文注释。详情可参考博客: ...
动态定时器quartz,可以用来动态跑批等执行任务!放在别的框架里面也能使用,主要看代码!
NULL 博文链接:https://fanshuyao.iteye.com/blog/2392350
自己搭建的后端框架紧供参考,如有雷同,纯属巧合,springmvc mybatis 动态quartz webservice pager分页
ssm-springMVC-整合Quartz(解决了无法注入service问题)-项目示例
spring4.2.2版本,springmvc,mybatis+quartz2.2
最基本的ssm 框架 并集成了shiro 主从库,quartz 持久化到数据库
使用SpringMVC作为路由控制, 集成 Swagger2 提供实时 RESTful API文档。 数据持久层集成 Mybatis 框架。 使用自定义注解 @TargetDataSource 实现了多数据源动态切换,支持数据库读写分离。 HTTP JOB 接口调用使用 ...
springmvc 集成quartz的代码,简单的例子方便大家参考,提供快捷的开发流程,一起学习努力!springmvc 集成quartz的代码,简单的例子方便大家参考,提供快捷的开发流程,一起学习努力!
1. Springmvc + Mybatis集成、SpringSecurity权限控制、Spring AOP事务处理。 2. Wink Rest服务、Webservice服务:jaxws、CXF等 3. IO 流上传下载文件,多线程操作 4. 发送邮件,配置邮件服务器,发基于html、纯...
定时任务图形界面的系统,集成框架有:SpringMVC、MyBaits、Thymeleaf、Bootstrap3、Quartz、log4j2;
集成框架有:SpringMVC、MyBaits、Thymeleaf、Bootstrap3、Quartz、log4j2; 集成示例有:定时任务图形化操作页面; 示例启动 数据库选择,默认开启H2内存数据库,若改用Oracle或MySQL,可在工程的datasource....
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为...
在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为模板引擎...