欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot的ThreadPoolTaskScheduler線程池輕松搞定15分鐘不操作自動取消訂單

 更新時間:2025年01月10日 12:17:35   作者:rain_is_my_name  
這篇文章主要介紹了Springboot的ThreadPoolTaskScheduler線程池輕松搞定15分鐘不操作自動取消訂單,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

ThreadPoolTaskScheduler線程池實現(xiàn)15分鐘不操作自動取消訂單

概要

使用ThreadPoolTaskScheduler的schedule方法實現(xiàn)當(dāng)前操作15分鐘后執(zhí)行定時任務(wù)

1,創(chuàng)建訂單后觸發(fā)

1.1 Impl層

 private final OrderSchedulerService schedulerService;
 @Override
    @Transactional(rollbackFor = Exception.class)
    public R saveHotelOrder(HotelOrderPO po) {
        HotelOrder order = new HotelOrder();
        boolean saveOrUpdate = saveOrUpdate(order);
        // 補充自己的開發(fā)邏輯
        if(條件滿足){
        	 schedulerService.createScheduler(order.getId());
        }
        return R.data(order.getId());
    }

1.2 OrderSchedulerService(核心類)

@Slf4j
@Service
@AllArgsConstructor
public class OrderSchedulerService {
    private final HotelOrderMapper hotelOrderMapper;
    private final ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    private final ConcurrentHashMap<Long, ScheduledFuture<?>> orderTasks = new ConcurrentHashMap<>();
    // 模擬用戶新增訂單
    public void createScheduler(Long orderId) {
        taskScheduler.initialize();
        // 15分鐘后執(zhí)行
        Instant plus = Instant.now().plus(Duration.ofMinutes(15));
        ScheduledFuture<?> future = taskScheduler.schedule(() -> {
            if (isOrderActive(orderId)) {
                // 取消訂單
                HotelOrder order = hotelOrderMapper.selectById(orderId);
                order.setStatus(CommonConstant.INT_5);
                hotelOrderMapper.updateById(order);
                log.info("15分鐘未操作,自動取消訂單:{}", order.getSerialNumber());
            }
        }, plus);
        orderTasks.put(orderId, future);
    }
    // 訂單取消時,取消訂單的15分鐘定時任務(wù)
    public void cancelScheduler(Long orderId) {
        ScheduledFuture<?> future = orderTasks.get(orderId);
        if (future != null && !future.isDone()) {
            future.cancel(false);
            orderTasks.remove(orderId);
            log.info("15分鐘有支付操作,取消訂單定時任務(wù):{}", orderId);
        }
    }
    // 檢查訂單是否仍在任務(wù)列表中(模擬訂單未刪除)
    private boolean isOrderActive(Long orderId) {
        return orderTasks.containsKey(orderId);
    }
}

2,訂單手動取消則取消該訂單對應(yīng)的定時任務(wù)

1.1 Impl層

 @Override
    public R cancelByIdForMini(Long id, String reason) {
    	// 寫自己的取消業(yè)務(wù)
        // 訂單取消時,取消訂單的15分鐘定時任務(wù)
        log.info(" 訂單取消時,取消訂單的15分鐘定時任務(wù):{}", id.toString());
        schedulerService.cancelScheduler(id);
        return R.status(true);
    }

總結(jié)

使用ThreadPoolTaskScheduler的schedule方法實現(xiàn)當(dāng)前操作15分鐘后執(zhí)行定時任務(wù)~
創(chuàng)作不易,尊重知識,轉(zhuǎn)載請附帶本文鏈接

到此這篇關(guān)于Springboot的ThreadPoolTaskScheduler線程池輕松搞定15分鐘不操作自動取消訂單的文章就介紹到這了,更多相關(guān)Springboot ThreadPoolTaskScheduler線程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot 枚舉類型的自動轉(zhuǎn)換的實現(xiàn)

    SpringBoot 枚舉類型的自動轉(zhuǎn)換的實現(xiàn)

    一般我們在數(shù)據(jù)庫都會定義數(shù)值型的枚舉常量,不管是序列化還是反序列化都是需要我們手動去轉(zhuǎn)換成枚舉類型的,本文主要介紹了Spring Boot 枚舉類型的自動轉(zhuǎn)換,感興趣的可以了解一下
    2022-03-03
  • SpringBoot實現(xiàn)初始化的三種策略模式

    SpringBoot實現(xiàn)初始化的三種策略模式

    本文主要介紹了SpringBoot實現(xiàn)初始化的三種策略模式,包括默認(rèn)初始化策略、懶加載初始化策略和自定義初始化策略,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • 詳解SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo)

    詳解SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo)

    這篇文章主要介紹了SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Java中使用Filter過濾器的方法

    Java中使用Filter過濾器的方法

    Filter過濾器是javaWeb層面的,它跟Servlet類似,每次前端請求,首先進(jìn)入的是過濾器,我們必須實現(xiàn)Filter接口,重寫三個方法,才能使用Filter過濾器,需要的朋友可以參考下
    2021-06-06
  • Maven的配置文件pom.xml詳解(含常用plugin)

    Maven的配置文件pom.xml詳解(含常用plugin)

    pom.xml是Maven項目的核心配置文件,它是 項目對象模型 - Project Object Model(POM)的縮寫,本文我們將全面解析pom.xml,了解其結(jié)構(gòu)和屬性,以及如何使用它來管理項目,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Mybatis-plus 雙主鍵的實現(xiàn)示例

    Mybatis-plus 雙主鍵的實現(xiàn)示例

    本文主要介紹了Mybatis-plus 雙主鍵的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Java并發(fā)(Runnable+Thread)實現(xiàn)硬盤文件搜索功能

    Java并發(fā)(Runnable+Thread)實現(xiàn)硬盤文件搜索功能

    這篇文章主要介紹了Java并發(fā)(Runnable+Thread)實現(xiàn)硬盤文件搜索,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Spring Cache的使用示例詳解

    Spring Cache的使用示例詳解

    SpringCache是構(gòu)建在SpringContext基礎(chǔ)上的緩存實現(xiàn),提供了多種緩存注解,如@Cachable、@CacheEvict、@CachePut等,本文通過實例代碼介紹了Spring Cache的使用,感興趣的朋友一起看看吧
    2025-01-01
  • MyBatis攔截器動態(tài)替換表名的方法詳解

    MyBatis攔截器動態(tài)替換表名的方法詳解

    因為我們持久層框架更多地使用MyBatis,那我們就借助于MyBatis的攔截器來完成我們的功能,這篇文章主要給大家介紹了關(guān)于MyBatis攔截器動態(tài)替換表名的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評論