Spring+quartz定时删除已过期未付款订单信息

原创 2016年05月19日 17:06:42

这两天做微信支付,业务场景为用户选择某个活动填写报名信息并选择票信息用微信支付付款!

一直纠结在是下单减库存还是支付成功减库存,只能说各有利弊。现形的做法我所了解的是以下几种解决方案:

1.下单减库存,并设置失效时间。定时器定时查询未付款且已过超时时间的订单进行删除并添加库存

2.支付成功减库存,但是可能会出现超卖的情况

3.12306队列形式,排队购买


由于我现在业务量和数据量都不是很大,所以打算采取第一种解决方式,下单减少库存,并设置失效时间,微信统一下单的时候也有个参数为订单失效时间。如果超时未付款或以外关闭,quartz每分钟轮询,删除超时订单并返回库存


1.quartz所需jar包【搜索得知spring3以下的需要1.x的quartz-出问题的可以检查下】

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
</pre><pre name="code" class="html"><span style="font-family:SimHei;font-size:14px;">2.Spring配置文件</span>
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

       <!-- 启动触发器的配置开始 -->
       <bean name="startQuertz" lazy-init="false" autowire="no"
             class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
              <property name="triggers">
                     <list>
                            <ref bean="myJobTrigger" />
                     </list>
              </property>
       </bean>
       <!-- 启动触发器的配置结束 -->

       <!-- quartz-2.x的配置 -->
       <bean id="myJobTrigger"
             class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
              <property name="jobDetail">
                     <ref bean="myJobDetail" />
              </property>
              <property name="cronExpression">
                     <!--每一分钟执行一次-->
                     <value>0 */1 * * * ?</value>
              </property>
       </bean>
       <!-- 调度的配置结束 -->

       <!-- job的配置开始 -->
       <bean id="myJobDetail"
             class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
              <property name="targetObject">
                     <ref bean="cleanOrder" />
              </property>
              <property name="targetMethod">
                     <value>delOrder</value>
              </property>
       </bean>
       <!-- job的配置结束 -->

       <!-- 工作的bean -->
       <bean id="cleanOrder" class="***.ActivityDao" />
</beans>
</pre><span style="font-family:SimHei; font-size:14px">3.目标类书写目标方法进行逻辑操作即可,具体定时时间间隔可以搜索cronExpression</span><p></p><pre>




版权声明:本文为博主原创文章,未经博主允许不得转载。

DelayQueue实现订单的定时取消

当订单定时取消需要修改数据库订单状态,但是怎么确定订单什么时候应该改变状态,解决方案有下面两种: 第一种,写个定时器去每分钟扫描数据库,这样更新及时,但是如果数据库数据量大的话,会对数据库造成很大的...
  • zj972535075
  • zj972535075
  • 2017年03月26日 16:23
  • 2518

7天自动收货,30分钟不支付订单自动取消是如何实现的?

1.我们以支付以后7天自动收货为例来说明下: (1)用户支付完成以后,把订单ID插入到内存的一个DelayQueue中,同时插入到Redis中。 (2)7天之内,用户点击了确认收货,则从DelayQu...
  • goldenfish1919
  • goldenfish1919
  • 2016年03月18日 15:55
  • 8956

使用java做订单失效(指定一段时间后)

本人所在的公司有个需求是订单为1小时有效期,过了有效期之后订单即置为失效,代码贴出来跟大家分享一下import java.util.concurrent.TimeUnit;public class O...
  • pipi_7
  • pipi_7
  • 2016年12月05日 11:27
  • 2678

自动取消失效订单(spring整合quartz)

转载:http://www.cnblogs.com/qingxinshujuan/p/5403878.html CronTrigger最详细的Cron表达式范例参考:http://blog.csdn...
  • menghuanzhiming
  • menghuanzhiming
  • 2017年09月01日 14:16
  • 1330

如何实现下订单后一个小时后未付款的订单自动取消

写个存储过程实现订单后一个小时为付款则订单自动取消的功能,然后增加给数据库增加个维护计划定时执行这个存储过程。或者自己写个小监控软件来按时执行。还可以写个aspx的页面用脚本控制它每小时刷新一次,自己...
  • niu08171211
  • niu08171211
  • 2014年08月08日 09:34
  • 3968

Quartz学习之实现关闭超时2天未付款的订单

1、依赖: org.quartz-scheduler quartz 2.2.1 org.springframework spring-context-su...
  • qq_34590943
  • qq_34590943
  • 2016年07月23日 17:55
  • 1417

Quartz调度器堵塞原理和解决

Quartz 调度器以多线程的方式执行调度任务JobDetail,缺省线程池大小为10,也就是说若调度器中已有10个Job在工作(线程没有结束),那么即使有JobDetail到了被触发的时间,新的Jo...
  • dong976209075
  • dong976209075
  • 2013年12月02日 17:54
  • 6889

Quartz入门实例5-处理因执行job超时而错过触发的job

例子将执行以下操作: 1/启动Quartz调度器 
  • a67474506
  • a67474506
  • 2014年07月31日 16:57
  • 3602

在Quartz里面设置TimeOut的设计

试用了一下Quartz,功能很强大,可惜以前已经有这方面的设计了,要替换的话,工作量太大了。对于以前经常碰到的一个问题:超时(TimeOut)的处理机制,好像Quartz里面没有相关的处理对策,于是试...
  • gabbler
  • gabbler
  • 2010年01月05日 11:59
  • 3402

实现3天订单自动取消

采用2种方式混合来处理,保证结果的完全准确性。 1、采用主动触发的方式来取消订单。 订单的表里面,再加入有效时间字段,如果查询的时候,如果订单为已下单未处理状态,查询有效字段,如果该字段的值少于当...
  • qilixiang012
  • qilixiang012
  • 2015年05月07日 18:26
  • 972
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring+quartz定时删除已过期未付款订单信息
举报原因:
原因补充:

(最多只允许输入30个字)