1. 程式人生 > >Spring+quartz定時刪除已過期未付款訂單資訊

Spring+quartz定時刪除已過期未付款訂單資訊

這兩天做微信支付,業務場景為使用者選擇某個活動填寫報名資訊並選擇票資訊用微信支付付款!

一直糾結在是下單減庫存還是支付成功減庫存,只能說各有利弊。現形的做法我所瞭解的是以下幾種解決方案:

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>