Search in sources :

Example 1 with Account

use of com.baomidou.samples.seata.entity.Account in project dynamic-datasource-samples by dynamic-datasource.

the class AccountServiceImpl method reduceBalance.

/**
 * 事务传播特性设置为 REQUIRES_NEW 开启新的事务
 */
@DS("account")
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void reduceBalance(Long userId, Double price) {
    log.info("=============ACCOUNT START=================");
    log.info("当前 XID: {}", RootContext.getXID());
    Account account = accountMapper.selectById(userId);
    Assert.notNull(account, "用户不存在");
    Double balance = account.getBalance();
    log.info("下单用户{}余额为 {},商品总价为{}", userId, balance, price);
    if (balance < price) {
        log.warn("用户 {} 余额不足,当前余额:{}", userId, balance);
        throw new RuntimeException("余额不足");
    }
    log.info("开始扣减用户 {} 余额", userId);
    double currentBalance = account.getBalance() - price;
    account.setBalance(currentBalance);
    accountMapper.updateById(account);
    log.info("扣减用户 {} 余额成功,扣减后用户账户余额为{}", userId, currentBalance);
    log.info("=============ACCOUNT END=================");
}
Also used : Account(com.baomidou.samples.seata.entity.Account) DS(com.baomidou.dynamic.datasource.annotation.DS) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

DS (com.baomidou.dynamic.datasource.annotation.DS)1 Account (com.baomidou.samples.seata.entity.Account)1 Transactional (org.springframework.transaction.annotation.Transactional)1