需求:做个分配任务的功能模块,在任务截止前的十五分钟进行提醒(发送邮件、短信、系统提醒)。每隔五分钟提醒一次,直到任务完成!

想法:刚开始是想着是不是可以做个监听器,监听截止时间。当时间到了开始进行定时任务(尴尬,经验不足的臆测)。可不怎么好实现。。。。后来只能换个思路,

   做个定时器,每五分钟执行一次,查出所有的任务截止时间,与当前时间比较,到十五分钟了进行提醒。。。。。听着好low啊,要不停的查询数据库。先只能暂时这样做着了。。

撸码:

  1、pom文件:

    

    <dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>

2、需要建个job的java类,继承  QuartzJobBean

  

public class MissionInformJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
try {
getMissionInform();
} catch (Exception e) {
logger.error("MissionInformJob ExecuteInternal MessagingException:" + e);
}
} public void getMissionInform (){} }

在方法里写要定时执行代码;

3、配置文件

 <!-- 要调用的工作类 -->
<bean id="missionJob" class="com.ceair.bcc.message.job.MissionInformJob"></bean> <!-- 任务配置列表 -->
<bean id="missionTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="missionJob" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>getMissionInform</value>
</property>
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="true"/>
</bean> <!-- 触发器配置 时间指定 -->
<bean id="missionCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="messageTask"></property>
<!-- cron表达式 -->
<property name="cronExpression">
<!-- 每隔5分钟执行一次-->
<!--<value>0/30 * * * * ?</value>-->
<value>0 0/5 * * * ?</value>
</property>
</bean> <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发器列表 -->
<!--<ref bean="msgCronTrigger" />-->
<!--<ref bean="emailCronTrigger" />-->
<ref bean="excessCronTrigger"/>
<ref bean="missionCronTrigger"/>
</list>
</property>
</bean>

虽然这样就写完了 但是还有很多疑问,,因为在网上也查了资料,很遗憾没有找到自己要的答案。

疑问:1、网上有的大神说  继承了QuartzJobBean类 就不需要再配置文件了,,,

    2、org.springframework.scheduling.quartz.CronTriggerFactoryBean  和org.springframework.scheduling.quartz.SimpleTriggerBean的区别

    https://blog.csdn.net/ye_sheng/article/details/48132393  这篇里写:

      * 任务调度的触发时机来分,主要有以下两种:

      1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean

      2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean

      注:这两种触发方式均可以跟两种作业继承方式相互组合来使用。

    https://blog.csdn.net/defonds/article/details/49496895  这里写:

      A:简单触发器,使用 SimpleTriggerFactoryBean
      你可以定义作业的启动时间、触发器之间的延迟时间以及 repeatInterval(频率)。

      

 <!-- Run the job every 2 seconds with initial delay of 1 second -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="simpleJobDetail" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="2000" />

      B:计划触发器,使用 CronTriggerFactoryBean
      这种类型更加灵活,允许你针对特定实例选择计划方案以及将来要执行的频率。

 <!-- Run the job every 5 seconds -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="firstComplexJobDetail" />
<!--<property name="cronExpression" value="0/5 * * ? * SAT-SUN" />-->
<property name="cronExpression" value="0/5 * * ? * *" />

做下记录,后期再进行深究和修正。。。

最新文章

  1. 为 MySQL 设置默认字符集(UTF-8)避免产生乱码
  2. Hash哈希(二)一致性Hash(C++实现)
  3. 在win2008中安装vs2005
  4. java LinkedBlockingQueue和ConcurrentLinkedQueue的区别
  5. 设置westorm自动代码提示
  6. ASP.NET中的指令:
  7. C# socket 实现消息中心向消息平台 转发消息 (修改)
  8. (转)spring ioc原理(看完后大家可以自己写一个spring)
  9. Android -------- 从一个Fragment跳转到另一个Fragment
  10. javascript之求最值
  11. s性能优化方面的小知识
  12. 如何用一张图片代替 &#39;input:file&#39; 上传本地文件??
  13. WinSCP安装与使用
  14. Linux CA证书与https讲解
  15. [CodeVS4438]YJQ Runs Upstairs
  16. centos7挂载新加4T硬盘到/home目录
  17. Java-动态代理技术
  18. FFmpeg4.0笔记:rtsp2rtmp
  19. JS 对应CSS 样式
  20. maven 插件jetty/tomcat启动 web 应用

热门文章

  1. 04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路
  2. Mego(1) - NET中主流ORM框架性能对比
  3. Python内置函数(34)——map
  4. Mego开发文档 - 事务
  5. 英语词汇(2)fall down,fall off和fall over
  6. 【iOS】UIViewController基类的实现
  7. POJ-2253 Frogger---最短路变形&amp;&amp;最大边的最小值
  8. Java调用SQL脚本执行的方案
  9. [转]使用awk批量杀进程的命令
  10. 确保 PHP 应用程序的安全 -- 不能违反的四条安全规则