骤然接触quartz,先从小处着手,why,what,how

quartz定时任务:

  为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求。

  1.用户方面的需要,为了提供更好的使用体验,例如,针对用户注册的监听,最终得到用户使用一定阶段各种提醒、互动方面的业务使用,以及针对用户生日的监听及定时任务的设置

  2.数据更新的需要,针对公司日终报表的设计,这里就涉及今日的主题,数据库相关存储过程的调用。存储过程是可执行的代码块,效率相对java后台代码效率要高,尤其是针对查询时,选用存储过程做逻辑判断。在12306网站数据管理中,网购车票预留几个小时进行数据的更新,一些专门数据库表数据的填充与更新。

  3.业务方面的需要,这里涉及工作中的实际需求,针对业务层的特定方法给以定时任务设置,尤其是在物流系统中,相关逾期的提醒,金融证券系统中,各种日终的运算等。

  

  什么是quartz:

  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。

  Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,跟精细的描述调度器、任务和触发器,跟精准的完成任务的调度。

  Quartz是一个完全由java编写的开源作业调度框架。核心是调度器,调度器负责管理Quartz应用运行时环境。Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境,而且Quartz里面的每个对象是可配置的或者是可定制的。

  调度器、任务和触发器简介

  ==Job与Trigger是一对一的关系,Scheduler与Trigger是一对多的关系。

  调度器:调度器用于将与作业触发器关联,一个作业可关联多个触发器,这样每个触发器被可以触发的作业执行;一个触发器可用于控制多个作业,触发时全部作业将获得调度。Quartz的调度器由Scheduler接口体现。
  作业:只需实现org.quartz.job接口即可.Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,
  Quartz确定作业运作的时候,它将调用 execute()方法体。
  触发器:有SimpleTrigger和CronTrigger两种类型
    1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean
    2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean

     

  案例demo参考:http://blog.csdn.net/wangguanyin98/article/details/50977764

spring与Quartz的整合

  资源参考:http://stevex.blog.51cto.com/4300375/1351980

  Spring配置调度器 schedule,作业 job,触发器 trigger的实例:

  

A.实际开发中的应用,applicationContext.xml即spring主配置文件中的配置:

<!-- ************************************定时执行任务区*************************************** -->
<!-- quartz线程池配置 -->
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean>

<!-- 更新申请状态 -->
<bean id="jdApplyStatusJobTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jdSftpService" />
<property name="targetMethod" value="updateApplyStatus" />
</bean>
<!-- 更新放款状态 -->
<bean id="jdLoanStatusJobTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jdSftpService" />
<property name="targetMethod" value="updateLoanStatus" />
</bean>

<!-- 定时计算罚息 -->
<bean id="payCaculateServiceJobTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="payCaculateService" />
<property name="targetMethod" value="settlementCaculate" />
</bean>

<!-- 设置更新申请状态的触发器 -->
<bean id="jdApplyStatusCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jdApplyStatusJobTask" />
<property name="cronExpression" value="0 25 10 * * ?" />
</bean>

<!-- 设置更新放款状态的触发器 -->
<bean id="jdLoanStatusCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jdLoanStatusJobTask" />
<property name="cronExpression" value="0 25 10 * * ?" />
</bean>

<!-- 设置计算罚息的触发器 -->
<bean id="payCaculateServiceCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="payCaculateServiceJobTask" />
<property name="cronExpression" value="0 41 17 * * ?" />
</bean>

<!-- 发送还款流水Job -->
<bean id="deductServiceJobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="deductService" />
<property name="targetMethod" value="repaymentDetail" />
</bean>

<!-- 还款流水发送Trigger -->
<bean id="deductServiceJobTaskCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="deductServiceJobTask" />
<property name="cronExpression" value="0 12 17 * * ?" />
</bean>

<!-- 调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="jdApplyStatusCronTrigger" />
<ref bean="jdLoanStatusCronTrigger" />
<!-- <ref bean="payCaculateServiceCronTrigger" />
<ref bean="deductServiceJobTaskCronTrigger" />-->
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>

B.Quartz定时任务,service的编写

@Service("payCaculateService")

public class PayCaculateService {
@Resource(name = "daoSupport")
private DaoSupport dao;
/*
* 根据合同号获取还款流水
*/
public List<PageData> getPayLslistPage(Page page) throws Exception {
return (List<PageData>) dao.findForList("PayCaculateMapper.getPayLslistPage",page);

}
/*
* 入账计算
*/
public String payCaculate(PageData pd) throws Exception {
try {
dao.findForObject("PayCaculateMapper.proPayCaculate",pd);
return "1";
} catch (Exception e) {
e.printStackTrace();
}
return "0";
}
/**
* 结息(罚息)定时计算
* @param pd
* @return
* @throws Exception
*/
public String settlementCaculate() throws Exception {
java.text.DateFormat format2 = new java.text.SimpleDateFormat("yyyy-MM-dd");
String sd= format2.format(new java.util.Date());
PageData pd=new PageData();
pd.put("settlement_date", sd);
dao.findForObject("PayCaculateMapper.settlementCaculate",pd);
return "1";
}

}

C.基于反射机制,对于mapper中制定id的 my sql存储过程的调用

<select id="batchCaculate" statementType="CALLABLE" parameterType="pd" resultType="pd">
<![CDATA[
{call js_batch_repay()}
]]>
</select>

<select id="oneCaculate" statementType="CALLABLE" parameterType="pd" resultType="pd">
<![CDATA[
{call js_one_repay(#{sub_contract_no},#{period})}
]]>
</select>

<select id="settlementCaculate" statementType="CALLABLE" parameterType="pd" resultType="pd">
<![CDATA[
{call js_settlement(#{settlement_date})}
]]>
</select>

转载于:https://www.cnblogs.com/nya206312/p/6089795.html

Quartz定时任务使用小记(11月22日)相关推荐

  1. 11月22日弹性计算跟您在广州不见不散

    11月22日,广州云栖大会,弹性计算针对广州专场诚邀各位嘉宾亲临 时间:2017年11月22日,13:30 地点:广州香格里拉酒店三层满江红厅 弹性计算与网络专场特意申请20张云栖大会电子商务票针对企 ...

  2. 11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载

    11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载 请点击下面的连接下载 [url]http://cid-b10793e754ad25f7.skydrive ...

  3. B站哔哩哔哩:11 月 22 日上午九时正起恢复在香港联交所买卖

    IT之家 11 月 19 日消息,哔哩哔哩今日晚间发布公告称,本公司已向香港联交所申请本公司的 Z 类普通股于 2021 年 11 月 22 日上午九时正起恢复在香港联交所买卖. 哔哩哔哩今日发布公告 ...

  4. 分享Silverlight/WPF/Windows Phone一周学习导读(11月22日-28日)

    分享Silverlight, WPF, Windows Phone 7一周学习导读系列,11月22日-11月28日. 本周Silverlight学习资源更新: Silverlight中的TextBox ...

  5. 倩女幽魂手游服务器维护多久,倩女幽魂手游11月22日在线维护公告

    亲爱的玩家: <倩女幽魂>手游将于本周四上午进行在线更新,更新期间无需停服,玩家可照常进行游戏.欢迎您届时体验本周放出的全新内容,祝全体玩家游戏愉快! 本周四在线更新内容如下: 服务器调整 ...

  6. 珠穆朗玛币王:11月22日是谁丢了136亿美元

    珠穆朗玛币王:11月22日是谁丢了136亿美元 昨天,一篇名为"上百亿美元比特币已永久丢失"的微博,在短时间内登上热搜榜. 这篇文章的根源,是区块链数据分析服务提供商Coin Me ...

  7. 古剑奇谭二服务器维护,《古剑奇谭二》11月22日例行维护更新公告

    为不断丰富游戏内容,给各位偃师大人提供良好的游戏环境,我们将于2018年11月22日08:00进行版本更新,此次更新为停服更新,预计维护时间为2个小时.请各位大人注意调整游戏时间,并相互转告.如果预定 ...

  8. 吃鸡服务器修改测试服,绝地求生测试服更新内容_绝地求生测试服11月22日更新了什么_52pk单机游戏...

    第二个测试服务器时间表 第一次发布 - > 11月22日11:00-11月24日16:00 第二次发布 - > 11月28日11:00-11月30日17:00 注:但不一定是可以实际游玩的 ...

  9. 失业日记 11月22日

    11月22日 晴 周日 早上起来吃完早餐,50多的Miss Z 发消息来说今天我们一家出去玩吗?想跟我们出去玩一次.本来我们是打算在家里休息一天的,毕竟现在疫情期间,周边都玩遍了,其他城市又封锁去不了 ...

最新文章

  1. 小程序商城制作,轻松打造自己的会员系统
  2. DB2 9 利用启示(733 测验)认证指南,第 7 部分: Java 编程(5)
  3. pacman安装php的位置,PacMan 01——地图的搭建
  4. python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍
  5. UA OPTI570 量子力学17 创生算符与湮灭算符
  6. flink入门实战总结
  7. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2
  8. 2021-10-7 !二叉树的层序遍历
  9. 腾讯云搭建WordPress个人博客小白版流程分享
  10. 亡羊补课2019-12-19
  11. hadoop jar包_快速搭建Hadoop-Hive-Zoopkeeper-Sqoop环境进入Sqoop学习环境
  12. Java nio Socket非阻塞模式
  13. C++STL(set……)
  14. 拿来就用:11款不容错过的 Node.js 框架
  15. 网站服务器是租还是买,建站服务器是买还是租?编辑教你聪明选
  16. Oracle存储过程异常
  17. springboot电影院订票售票系统毕业设计毕设作品开题报告开题答辩PPT
  18. 什么是RS485总线?怎么使用RS485总线?——转自微信公众号弱点课堂
  19. 五、pcb文件初始设置
  20. 10年软件测试工程师 常用八大测试用例设计方法

热门文章

  1. 斯特林公式、沃利斯公式
  2. 对于递归算法和二分查找的理解
  3. 事务4个隔离界别及脏读,不可重复读,幻读
  4. 速算24 c语言,C语言源程序代码-速算24
  5. A. chino with string(ac自动机+floyd矩阵快速幂)
  6. 基于Mysql 的SQL应用---2021(ZSD版)
  7. 没听过超融合一体机你可就out了
  8. 著名EMORY大学logo翻新案例—跟高手学设计
  9. python 修改元组的方法?怎么修改元组?
  10. Java核心技术 卷1-总结-18