Java 代码发送短信有 三个状态 1 待发送 4 发送中 2 发送成功 ,我想防止 发送过程中 系统重启 导致 状态卡再 4 咋处理

Java 代码发送短信有 三个状态 1 待发送 4 发送中 2 发送成功 ,我想防止 发送过程中 系统重启 导致 状态卡再 4 咋处理

根据代码中的注解@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED),可以推断出send()方法已经被事务管理了,因此不需要额外添加事务提交的代码。

如果你想在send()方法内部的某一部分进行事务提交,可以将该部分代码提取出来,放到一个单独的方法中,并在该方法上添加事务注解@Transactional,然后在send()方法中调用这个新的方法。这样新的方法将独立执行事务,完成事务提交。例如:

public void send() throws Exception {
    // some code
    //修改状态为4  代码
    // 提交事务的部分代码
    commitPart();
    
    // 下面的事务不受上面的提交影响
    
    // rest of the code
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void commitPart() throws Exception {
    // 需要提交事务的部分代码
}

这里使用了@Transactional(propagation = Propagation.REQUIRES_NEW)注解来创建一个新的事务。这样在commitPart()方法内部的代码会单独执行,并完成事务提交。

在发送短信方法上加一个事务 重启会自己回滚事务的事务没提交

	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)

为了防止系统重启导致状态卡在4,可以在发送短信时使用Java的事务处理机制。在事务中,将状态从1改为4,然后执行发送短信的操作,如果发送成功,则将状态改为2,如果发送失败,则将状态改为1。如果在发送过程中系统重启,事务会自动回滚,状态会回到1,这样就可以避免状态卡在4的问题。

以下是一个简单的示例代码:

	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public void send(String phoneNumber, String message) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        conn = getConnection();
        conn.setAutoCommit(false); // 开启事务
        pstmt = conn.prepareStatement("UPDATE sms SET status = ? WHERE phone_number = ?");
        pstmt.setInt(1, 4); // 将状态改为4
        pstmt.setString(2, phoneNumber);
        pstmt.executeUpdate();
        // 执行发送短信的操作
        boolean success = sendSms(phoneNumber, message);
        if (success) {
            pstmt.setInt(1, 2); // 将状态改为2
            pstmt.executeUpdate();
            conn.commit(); // 提交事务
        } else {
            pstmt.setInt(1, 1); // 将状态改为1
            pstmt.executeUpdate();            conn.rollback(); // 回滚事务
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        closeConnection(conn, pstmt);
    }
}
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值