热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

quartzjob运行中修改cron表达式_quartz框架和关闭超时订单

一、scheduled定时任务器Scheduled定时任务器:是Spring3.0以后自带的一个定时任务器。1.1scheduled基于配置方式1.1.1job类用来

一、scheduled定时任务器

Scheduled 定时任务器:是 Spring3.0 以后自带的一个定时任务器。

1.1 scheduled基于配置方式

1.1.1 job类

用来写要定时的业务。

例子:打印时间

public class JobDemo {@Scheduled(cron="*/1 * * * * ?")public void method(){System.out.println(new Date());}
}

1.1.2 applicationContext-task.xml


http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">

1.1.3 测试类

public class ScheduledTest {public static void main(String[] args) throws IOException {new ClassPathXmlApplicationContext("classpath:applicationContext-task.xml");System.in.read();}
}

1.2 scheduled基于注解方式

1.2.1 job类

@Componen
@EnableScheduling //告诉spring这是个定时任务类
public class JobDemo @Scheduled(cron="*/1 * * * * ?")public void method(){System.out.println(new Date());}
}

1.2.2 applicationContext-task.xml


http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">

1.2.3 测试类

public class ScheduledTest {public static void main(String[] args) throws IOException {new ClassPathXmlApplicationContext("classpath:applicationContext-task.xml");System.in.read();}
}

二、 quartz定时任务框架

2.1 Quartz是什么

  • Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目。
  • 它可以与J2EE与J2SE应用程序相结合也可以单独使用。
  • Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。
  • Jobs可以做成标准的Java组件或EJBs。
  • Quartz的最新版本为Quartz2.2.1。

2.2 Quartz框架的使用思路

  1. job - 任务 - 你要做什么事?
  2. Trigger - 触发器 - 你什么时候去做?
  3. Scheduler - 任务调度 - 你什么时候需要去做什么事?
bb5067050f849bd2ce88ad2995563a6c.png

2.3 Quartz框架的使用

2.3.1 添加依赖

2.3.1.1 修改ego的pom.xml

... ...2.2.2....... org.quartz-schedulerquartz${quartz.version}

2.3.1.2 修改ego-order-web的pom.xml

......org.quartz-schedulerquartz

2.3.2 job类

继承job

public class JobDemo implements Job{@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println(new Date()+"------------------------------------");}
}

2.3.3 测试类

public class QuartzTest {public static void main(String[] args) throws SchedulerException {/*** job:任务类 做什么事* trigger:触发器 什么时候做* scheduled:任务调度容器 什么时候做什么事*///创建job对象JobDetail job = JobBuilder.newJob(JobDemo.class).build();//创建trigger对象CronTrigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("*/1 * * * * ?")).build();//创建scheduled对象Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(job, trigger);//启动scheduler.start();}
}

2.4 Spring整合Quartz框架

200702e7e104469e7ddb2703d16ffc14.png

2.4.1 job类

通过配置实现:

public class JobDemo2{public void execute(){System.out.println(new Date()+"------------------------------------");}
}

2.4.2 applicationContext-task.xml


http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">

2.4.3 测试类

public class QuartzTest2 {public static void main(String[] args) throws IOException {new ClassPathXmlApplicationContext("classpath:applicationContext-task.xml");System.in.read();}
}

三、 cron表达式

Cron 表达式是一个字符串,分为 6 或 7 个域,每一个域代表一个含义。

Cron 有如下两种语法格式:

  1. Seconds Minutes Hours Day Month Week Year
  2. Seconds Minutes Hours Day Month Week

3.1结构

corn 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份

二、cron表达式

其中星期 1-7分别表示(周日-周六)

910a18543e1fbd9e93d38d07c711c184.png

字段含义:

45c1bd22f0f73a3afeb8884a8cee1670.png

示例:

3e141fdf67b4670a7ace3e35feb4180f.png

?:

“?”字符只在日期域或星期域中使用。它被用来指定“非明确的值”。两个域必有一个要用?

例如:

想在每月的20日凌晨触发调度:0 0 0 20 * ?,只能使用如下写法:0 0 0 20 * ?。其中星期域只能用?,而不能使 用*,因为*表示不管星期几都会触发恰好与20冲突。

想在每周三凌晨触发调度:0 0 0 0 * 4,只能使用如下写法:0 0 0 0 * 4。其中日期域只能用?,而不能使 用*,因为*表示日期会触发恰好与周三(4)冲突。

3. 关闭超时2天未付款的订单

3.1 分析

  1. 在订单系统中导入相关的依赖
  2. 定义job实现业务:

扫描订单表:

  • 修改订单的状态为关闭状态,订单的结束时间、关闭时间、修改时间为当前时间;
  • 把订单中商品的库存数量加回去;
  • 扫描条件&#xff1a;状态是未付款 并且 创建时间 <&#61; 当前之间 – 2天 并且 付款方式为在线支付的订单。

3、 定义触发

  1. 理论上需要实时触发&#xff08;会出现性能问题&#xff09;&#xff1b;
  2. 实际操作1分钟触发一次。

3.2 实现关闭超时2天未付款的订单

3.2.1 job类

public class OrderQuartz {&#64;Autowired private OrderService orderService;public void closeTimeOutOrder(){//查询超时订单List tbOrders &#61; orderService.listTimeOutOrder();//关闭超时订单&#xff1a;改变status、updatatime、endtime、closetimefor(TbOrder tbOrder: tbOrders) {tbOrder.setStatus(6);tbOrder.setUpdateTime(new Date());tbOrder.setEndTime(new Date());tbOrder.setCloseTime(new Date());orderService.closeTimeOutOrder(tbOrder);//把订单库存量加回去List orderItemList &#61;orderService.loadOrderItemListService(tbOrder.getOrderId());for(TbOrderItem tbOrderItem: orderItemList) {orderService.addItemNum(tbOrderItem.getOrderId(),tbOrderItem.getNum());}}}
}

3.2.2 service

consumer端的servimpl相关方法&#xff1a;

//加载超时订单&#64;Overridepublic List listTimeOutOrder() {// TODO Auto-generated method stubreturn tbOrderServiceProxy.listTimeOutOrder();}//加载订单的内容&#64;Overridepublic List loadOrderItemListService(String orderid) {// TODO Auto-generated method stubreturn tbOrderServiceProxy.loadTbOrderItemListService(orderid);}//关闭超时订单。修改status、updatetime、endtime、closetime&#64;Overridepublic void closeTimeOutOrder(TbOrder tbOrder) {// TODO Auto-generated method stubtbOrderServiceProxy.closeTimeOutOrder(tbOrder);}//把库存熟练添加回去 &#64;Overridepublic void addItemNum(String orderId, Integer num) {// TODO Auto-generated method stubtbOrderServiceProxy.addItemNum(orderId, num);}

provide端的serviceimpl相关方法

&#64;Overridepublic List listTimeOutOrder() // TODO Auto-generated method stureturn tbOrderMapper.listTimeOutOrder();}&#64;Overridepublic List listOrderItem(String orderid) {TbOrderItemExample tbOrderItemExample &#61; new TbOrderItemExample();Criteria criteria &#61; tbOrderItemExample.createCriteria();criteria.andOrderIdEqualTo(orderId);return tbOrderItemMapper.selectByExample(tbOrderItemExample);}&#64;Overridepublic void closeTimeOutOrder(TbOrder tbOrder) {// TODO Auto-generated method stubtbOrderMapper.updateByPrimaryKeySelective(tbOrder);}&#64;Overridepublic void addItemNum(String orderId, Integer num) {// TODO Auto-generated method stubTbItem item &#61; tbItemMapper.selectByPrimaryKey(Long.parseLong(orderId));item.setNum(num&#43;item.getNum());tbItemMapper.updateByPrimaryKeySelective(item);}

3.2.3 mapper

List listOvertimeOrder();

3.2.4 applicationContext-task.xml


http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">//一分钟触发一下




推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
author-avatar
乖乖雯莉_775
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有