基于SpringMvc的定时任务设计与踩的坑
2017-02-11 14:35
267 查看
需求:系统内有个sla计时器需要每隔一分钟执行一次
思路:项目启动的时候将sla定时任务存入数据库并调用定时任务群启动方法完成
配置系统启动Listener
写系统启动监听类,继承ContextLoaderListener 就可以在系统启动完成调用contextInitialized方法,
createSlaTaskOper()方法中初始化sla定时任务数据到数据库
ClusterQuartzManager.startAll();是启动所有定时任务的方法
这里在写sla定时任务的excute()方法的时候,需要实现SchedulerjobBean接口 。
踩过的坑:
1.在调用初始化sla定时任务数据时,报 securityManager的错误
经一顿推到发现listener优先于 filter加载 导致shiro还没有加载就要请求登录人信息
2.ContextHolder.getBean(SlaTaskService.class); 这个方法在正常情况下还是尽量少用,
很容易出现找不到的问题,就是这个class没有注入成功
思路:项目启动的时候将sla定时任务存入数据库并调用定时任务群启动方法完成
配置系统启动Listener
<listener> <listener-class>com.dc.itsm.web.MyContextLoaderListener</listener-class> </listener>
写系统启动监听类,继承ContextLoaderListener 就可以在系统启动完成调用contextInitialized方法,
createSlaTaskOper()方法中初始化sla定时任务数据到数据库
public class MyContextLoaderListener extends ContextLoaderListener { private static final Logger log = LoggerFactory.getLogger(MyContextLoaderListener.class); public MyContextLoaderListener() { } public MyContextLoaderListener(WebApplicationContext context) { super(context); } /** * Initialize the root web application context. */ @Override public void contextInitialized(ServletContextEvent event) { initWebApplicationContext(event.getServletContext()); log.info("=======系统启动成功====="); try { //创建sla定时任务 SlaTaskService attendTimerTask = ContextHolder.getBean(SlaTaskService.class); attendTimerTask.createSlaTaskOper(); //开启所有定时任务 ClusterQuartzManager.startAll(); } catch (SchedulerException e) { e.printStackTrace(); log.error("=======定时任务初始化失败====="); } } /** * Close the root web application context. */ @Override public void contextDestroyed(ServletContextEvent event) { super.contextDestroyed(event); } }
ClusterQuartzManager.startAll();是启动所有定时任务的方法
这里在写sla定时任务的excute()方法的时候,需要实现SchedulerjobBean接口 。
踩过的坑:
1.在调用初始化sla定时任务数据时,报 securityManager的错误
经一顿推到发现listener优先于 filter加载 导致shiro还没有加载就要请求登录人信息
2.ContextHolder.getBean(SlaTaskService.class); 这个方法在正常情况下还是尽量少用,
很容易出现找不到的问题,就是这个class没有注入成功
相关文章推荐
- springmvc基于注解的定时任务
- Web后台任务定时执行工具的设计与实现
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- java中基于线程池的任务调度设计
- 项目所用技术回顾之定时任务(基于spring quartz)
- Python 定时任务设计
- 基于AVR单片机的多任务嵌入式Internet系统设计
- 游戏任务成就体系的实现(附三):成就系统基于Mysql+Cache的数据库访问设计实现
- Spring 3整合Quartz 1实现定时任务一:常规整合(基于maven构建)
- springmvc定时任务
- android 定时任务基于闹钟机制
- 操作系统课程设计--基于线程的多任务系统的实现
- 基于嵌入式OS的任务设计-----任务划分
- 基于嵌入式OS的任务设计-----任务划分
- java 定时任务(基于java学习笔记)
- 基于生产-消费者模式的任务异步线程池设计与实现
- 基于WF设计业务流程平台_参与者与任务列表
- java中基于TaskEngine类封装实现定时任务
- Spring 3整合Quartz 2实现定时任务一:常规整合 (基于maven构建)
- SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务