fenixsoft / fenixsoft/monolithic_arch_springboot

自动冲销解冻的触发器的并发问题

Open
#2 1 comment 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.