當前位置:編程學習大全網 - 源碼下載 - 通過線程池進行輪詢

通過線程池進行輪詢

首先應該註入ThreadPoolTaskScheduler,通過這個線程池開啟壹個線程

然後調用這個線程池中的schedule方法,該方法會在規定的時間段中創建線程,通過在這個方法中重寫runnable,創建線程,schedule方法其實會返回壹個對象,可以通過該對象停止生產線程,但是由於這個需求需要在匿名內部類中進行停止,所以方法外停止不可用,所以用遞歸進行判斷何時停止生產

源碼如下

package com.romens.order.service.impl;

import com.romens.order.Do.RefundOrderInfoDO;

import com.romens.order.Do.RefundOrderPayDO;

import com.romens.order.common.ResponseData;

import com.romens.order.domain.enums.FromEnum;

import com.romens.order.domain.enums.RefundOrderStateEnum;

import com.romens.order.domain.enums.RefundPayStateEnum;

import com.romens.order.domain.pay.RefundPaySMRequest;

import com.romens.order.domain.pay.RefundPaySMResponse;

import com.romens.order.repository.RefundOrderInfoRepository;

import com.romens.order.repository.RefundOrderPayRepository;

import com.romens.order.service.PayStateService;

import com.romens.order.service.PaymentForRefundService;

import com.romens.order.service.RefundOrderInfoService;

import lombok.extern.slf4j.Slf4j;

import org.joda.time.DateTime;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.scheduling.Trigger;

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

import org.springframework.stereotype.Service;

@Service

@Slf4j

public class PaymentStateSchedueServiceImplimplements PayStateService {

@Autowired

private ThreadPoolTaskSchedulerschedulerExcutor;

@Autowired

private PaymentForRefundServicepaymentForRefundService;

@Autowired

private RefundOrderPayRepositoryrefundOrderPayRepository;

@Autowired

private RefundOrderInfoServicerefundOrderInfoService;

@Autowired

private RefundOrderInfoRepositoryrefundOrderInfoRepository;

@Override

public void startSchedue(RefundPaySMRequest refundPaySMRequest, String secretKey, RefundOrderPayDO refundOrderPayDO) {

Trigger trigger =null;

schedulerExcutor.schedule(new Runnable() {

@Override

public void run() {

ResponseData response =paymentForRefundService.queryPaySMRefund(refundPaySMRequest, secretKey);

if (response.getCode().equals(200)) {

if (response.getData().getRefundState().equals("2")) {

//更新支付信息狀態

refundOrderPayDO.setRefundState(RefundPayStateEnum.REFUND_OK.getStateCode());

updateRefundInfo(refundOrderPayDO);

//醫館自動提單

RefundOrderInfoDO refundOrderInfoDO =refundOrderInfoRepository.getRefundOrderInfoByUid(refundOrderPayDO.getEntId(), refundOrderPayDO.getStoreCode(), refundOrderPayDO.getRefundOrderUid());

if (refundOrderInfoDO.getSource().equals(FromEnum.Hospital.getValue())) {

refundOrderInfoService.autoSubmitHospitalRefundOrderInfo(refundOrderPayDO.getEntId(), refundOrderPayDO.getStoreCode(), refundOrderInfoDO);

}

return;

}else if (response.getData().getRefundState().equals("3")) {

refundOrderPayDO.setRefundState(RefundPayStateEnum.REFUND_FAILED.getStateCode());

updateRefundInfo(refundOrderPayDO);

return;

}

}

startSchedue(refundPaySMRequest, secretKey, refundOrderPayDO);

}

}, DateTime.now().plus(5 *1000).toDate());

}

public void updateRefundInfo(RefundOrderPayDO refundOrderPayDO) {

try {

refundOrderPayRepository.updateRefundState(refundOrderPayDO);

RefundOrderStateEnum refundOrderStateEnum =refundOrderInfoService.getRefundOrderStateByPay(refundOrderPayDO.getEntId(), refundOrderPayDO.getStoreCode(), refundOrderPayDO.getRefundOrderUid());

refundOrderInfoRepository.updateRefundOrderState(refundOrderPayDO.getEntId(), refundOrderPayDO.getStoreCode(), refundOrderPayDO.getRefundOrderUid(), refundOrderStateEnum.getStateCode());

}catch (Exception e) {

log.info("PayStateService:", e);

}

}

}

  • 上一篇:英文縮寫大全(全部)
  • 下一篇:LDAP在JAVA中如何模糊查詢
  • copyright 2024編程學習大全網