Spring+Quarzt整合
2016-07-12 20:39
369 查看
原文链接:http://www.cnblogs.com/Caoxdong/p/5664797.html
Quarzt有三个核心概念:调度器,任务和触发器 (jobDeail/Trigger/Scheduler) 配置Quarzt: 步骤:1.创建 JobDetail和Trigger 2.讲 JobDetail和Trigger 注册到Scheduler中 3.用Triggerhe和JobDetail 中的任务进行调度 1.配置:spring.xml 第一种配置方式 <!-- 配置任务 --> <bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean" p:jobClass="com.test.quarztTest" p:applicationContextJobDataKey="applicationContext"> <property name="jobDataAsMap"> <map> <entry key="size" value="10" /> <map> </property> </bean> <!-- 配置触发器 --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean" p:jobDetail-ref="jobDetail" --引用的jobDetail p:startDelay="1000", --延迟多长时间开始触发 单位为毫秒 默认 0 p:repeatInterval="2000" --间隔时间 P:repeatCount="100"> --重复次数 <property name="jobDataAsMap"> <map> <entry key="count" value="10"/> </map> </property> </bean> <!-- 配置调度器 --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list><ref bean="AutomaticOrderTrigger"/></list> </property> <property name="schedulerContextAsMap"> <map> <entry key="timeout" value="30"/> </map> </property> </bean> 最后实体类 必须继承job接口 publicclass quarztTest implements Job { public void execute(JobExecutionContext jctx) throws JobExecutionException{ Map dataMap = jctx.getJobDetail().getJobDataMap(); String size = (String)dataMap.get('size'); //获取在xml定义的datamap中的值 //获取spring容器 ApplicationContext cxd = (ApplicationContext)dataMap.get("applicationContext");//可以访问容器中的bean了 } } 第二种 注解配置 package com.zhangk.babysitter.controller.quarzt; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.zhangk.babysitter.service.babysitter.BabysitterService; @Component public class AutomaticOrder { @Autowired private BabysitterService babysitterService; @Autowired private SessionFactory factory; @Scheduled(cron = "0/5 * * * * ?") public void orderByBabysitter() { //方法体 } } spring xml配置 <task:annotation-driven scheduler="AutomaticScheduler" mode="proxy"/> <task:scheduler id="AutomaticScheduler" pool-size="10"/> //同时只能运行10项目 但是这种方法会在执行数据库操作的时候 会报没有session的错误 网上有很多说没有配置openSessionInView 的缘故 想了很久 问题就在于 如果你想在项目启动的时候 他就自动运行的话 因为你不是发的请求 所以 你不会被 openSessionInView 所拦截 也就不会打开session 导致后续报错 反之 如果是发一个请求来开启任务的话 也就不会报这个没有session的错了 解决办法 手动开启 发请求 或者在执行该方法的时候 打开一个session;
转载于:https://www.cnblogs.com/Caoxdong/p/5664797.html
相关文章推荐
- springboot整合quarzt定时任务(多任务)+xml格式
- spring-boot--整合thymeleaf模板
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- 三、spring的profile的使用,以及javaconfig配置整合mybatis,以及el表达式的使用
- JAX-RS 和 Spring 整合开发
- spring和单元测试做整合
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例
- Spring与Struts如何整合
- activiti自定义流程之Spring整合activiti-modeler实例(七):任务列表展示
- Spring整合Hibernate的步骤
- 最新spring4.0.3+hibernate4.3.5整合
- springboot整合H+,基于summernote的富文本编辑器图片上传
- spring整合hibernate
- Spring整合Junit测试
- spring 和 struts 整合遇到的问题(学习中)
- [spring] springmvc 整合freemarker 出现版本错误
- MyBatis3整合Spring3的Transaction事务处理
- spring-data-mongodb MongoDB 整合 Spring
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)