fenixsoft / fenixsoft/monolithic_arch_springboot
自动冲销解冻的触发器的并发问题
- Dominant language
- Java
- Stars
- 570
- Forks
- 324
- PR merge metrics
- No merged PRs in 30d
Description
` timer.schedule(new TimerTask() {
public void run() {
synchronized (payment.getPayId().intern()) {
// 使用2分钟之前的Payment到数据库中查出当前的Payment
Payment currentPayment = paymentRepository.findById(payment.getId()).orElseThrow(() -> new EntityNotFoundException(payment.getId().toString()));
if (currentPayment.getPayState() == Payment.State.WAITING) {
log.info("支付单{}当前状态为:WAITING,转变为:TIMEOUT", payment.getId());
accomplishSettlement(Payment.State.TIMEOUT, payment.getPayId());
}
}
}
}, payment.getExpires());
`
1.先findById,2.再判断状态,3,再执行accomplishSettlement
如果产生并发可能产生在accomplishSettlement之前payment已经被支付了,是否可能产生业务问题。
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.