写在前面:

前面有简单的记录下Timer定时的用法,但是在此次项目中,选择的是quartz来完成定时操作任务的。两者都可以完成定时操作,但是spring可以整合quartz,并且配置起来也比较简便,还可以同时跑多个任务。就选择了quartz,quartz的用法也很强大,这里也是简单的记录下。

第一步还是需要写自己的任务类,如果有涉及到对数据库的增删改查操作,就按照正常的action,service ,dao的三层来编写方法就好,只不过现在不是通过页面发送请求来调用action,而是通过quartz的定时来调用action操作。

1.编写自己的任务类:

@Controller("TimerTask")public classTimerTask {

@ResourceprivateProjectWorkItemAssignmentService projectWorkItemAssignmentService;/*** 每天12:00去自动暂停ProjectWorkItemAssignment表中在执行的workItem

* 以及去自动暂停WorkHoursRecord表中当天在执行的workItem*/

public void autoPauseWorkItemOne() throwsException{

projectWorkItemAssignmentService.autoPauseWorkItemOne();

}/*** 每天13:30去自动开启ProjectWorkItemAssignment表中在执行的workItem

* 以及去自动开启WorkHoursRecord表中当天在执行的workItem*/

public void autoStartWorkItem() throwsException{

projectWorkItemAssignmentService.autoStartWorkItem();

}/*** 每天17:30去自动暂停ProjectWorkItemAssignment表中在执行的workItem

* 以及去自动暂停WorkHoursRecord表中当天在执行的workItem*/

public void autoPauseWorkItemTwo() throwsException{

projectWorkItemAssignmentService.autoPauseWorkItemTwo();

}

}

这里的任务类,我是当做action来写的,然后里面的业务方法,根据自己的需求来即可,这里只是简单的列举一下子,后面对应的service,dao的业务就不具体上代码了

2.编写配置文件,这里我用到的是使用配置文件的形式来配置程序执行的周期以及频率的(可以使用代码的,自己下去查阅资料),由于spring可以整合quartz,还是挺方便的。

我们可以把quartz的配置写在applicationContext.xml文件里面,也可以单独拿出来写一个,然后导入到applicationContext.xml文件中。这里就单独写一个文件。

applicationContext-quartz.xml(这里我自己配置了三个定时任务,可以根据自己的需要去开启配置)

0 0 12 * * ?

0 30 13 * * ?

0 30 17 * * ?

记得在spring的配置文件中加入quartz的配置文件

applicationContext.xml:

对于调用任务类有两种方式,(使用JobDetailBean来调用某个类,)这里我用的是直接执行某个类的哪一个方法,比较方便。

其实在刚开始编写的过程中也遇到各种问题,下面也简单的记录下。

当任务类是service层的类时,无法使用getCurrentSession()来获取session,程序不报错,直接卡在那里。然后是可以使用openSession()来重新打开一个session的,但是对于增删改,每次都需要自己手动进行session的关闭以及事务的提交,不是很方便。当时一直没有找到问题所在,为什么不可以使用getCurrentSession,虽然quartz是新开了一个线程,但是getCurrentSession()不是获取当前线程的session,如果没有就重新开一个么?为什么获取不到呢?很是郁闷.......后来考虑到了是不是项目配置的session的生命周期有影响,因为项目延长了session的生命周期,如下:

OpenSessionInViewFilter

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

决定还是按照规矩来,不要把service层的类直接当任务类去调用,而是改用任务类为action,哇咔咔咔,竟然成功了,可以使用getCurrentSession来获取session了,真的是折磨.....

所以写代码还是要多多试试,多多实践下,然后在试的过程中一不小心就会给你大大的惊喜!!!

虽然记录的很简单,但是总比不记录的要好,恩就这样安慰自己,这个样子也是很好的............................

补充一下一个获取sessionFactory的方式:

WebApplicationContext wac =ContextLoader.getCurrentWebApplicationContext();

SessionFactory factory=wac.getBean(SessionFactory.class);

Session session=factory.openSession();

在遇到问题的过程中也查阅了很多资料,https://blog.csdn.net/davaid_lee/article/details/44588577

quartz java web_java web定时任务---quartz相关推荐

  1. ASP.NET Core 2.2+Quartz.Net 实现Web定时任务

    作者:Julian_酱 链接:http://www.cnblogs.com/mi12205599/p/10361763.html 作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就 ...

  2. ASP.NET Core+Quartz.Net实现web定时任务

    点击蓝色"Dotnet Plus"关注我哟 加个"星标",每天清晨 07:25,干货推送! 作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路 ...

  3. java日记(2)------定时任务quartz浅析

    为什么80%的码农都做不了架构师?>>>    下面是笔者写job时遇到的一些问题记录,有不对的地方请指出 以下是定时任务配置 <bean name="quartzS ...

  4. cad java web_Java Web的演变:大魏Java记3

    一.从Java到Tomcat 我们知道,Java分为JavaME(这个主要是做一些嵌入式的程序,我们不关注),JavaSE,JavaEE三大类.JavaSE和JavaEE的区别如下图所示,我们可以得出 ...

  5. filter java web_java web filter 之一 基础实现

    本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 Filter 是java下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受r ...

  6. app访问java web_Java Web App体系结构

    app访问java web 我曾经利用Servlet,JSP,JAX-RS,Spring框架,Play框架,带有Facelets的JSF和一些Spark框架. 以我的拙见,所有这些解决方案都远非面向对 ...

  7. bootstrap java web_Java web MVC(jsp,servlet,dao)+Bootstrap购物网站开发经验总结 (持续更新)...

    一开始对java web 不是很熟悉,重新温习了java web ,对El expression ,jstl的使用有了更加深的印象,mvc模式下的分层结构有了进一步的了解. MVC中的M就是model ...

  8. 仿天猫 java web_JAVA WEB项目教程-模仿天猫J2EE版

    做一个模仿个天猫官网的J2EE项目,来练手吧 1. 项目演示地址 2. 学习思路 其实呢,要在网上找一个J2EE项目是很容易的,随便在百度或者git搜索,都是一大把. 但是拿到这样的搜索来的J2EE项 ...

  9. 北大青鸟java+web_java web ui开发

    步骤提交的分一般支创建是(,保存修改项目之后,不需如果一个要更在同组就改u,提交大致流程就是这样,本地文件添加点击到缓地仓的文远程应的库的)将将文件添加到将本件推交相之后中(中(中提创建存区仓库仓库分 ...

最新文章

  1. WIN7源码安装Apache和PHP注意事项
  2. c++与python 数据类型对应
  3. competitor product could not be downloaded
  4. Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。...
  5. Qt总结之十七:QByteArray类型里含中文的数据解析出现乱码
  6. FFMPEG列出DirectShow支持的设备
  7. 不能使用 float 和 double 来表示金额等精确的值
  8. java报数报到3的人_Java-n个人报数
  9. HTML实现学习网站首页
  10. 倍福--控制步进电机
  11. win10设置计算机关机时间,最新版:如何在Win10计算机上设置计划的关机时间? Windows 10计算机设置定时关机命令...
  12. 创建与维护MySQL数据库
  13. 网络安全中非常好用的webshell检测工具!
  14. PDF Expert for Mac的快速签名方式
  15. macOS在IDEA上集成PLANTUML Graphviz绘制UML图并导出SVG
  16. vscode 前端常用插件推荐
  17. 45个android实例源码
  18. 让数据填报、收集效率提升80%!这个报表工具真的太强大了
  19. iOS设计:绘图及性能
  20. AIfloki——碾压AIdoge,开启链游新时代

热门文章

  1. 二极管7种应用电路详解之五
  2. Ch2,KNN分类算法程序分析----机器学习实践P19页
  3. 神经网络设计与分析之如何知道权重的利用率
  4. python-pptx
  5. 【sublime Text】sublime Text3安装可以使xml格式化的插件
  6. jquery获取对象
  7. UVa 11624,两次BFS
  8. DRP问题集结(一)-Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory...
  9. 如何调试分析Android中发生的tombstone
  10. Spark源码阅读02-Spark核心原理之消息通信原理