springboot 事务之后进行其他操作

直接上代码

import java.util.function.Consumer;

import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;

@Component
public class TransactionCommitHandler {
    public void handle(String topic, Consumer<String> consumer) {
        if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
                @Override
                public void afterCommit() {
                    //具体的操作
                    consumer.accept(topic);
                }
            });
        }
    }
}

dao层调用

@Override
    public void insertMessageTemplate(MessageTemplate messageTemplate) {
        messageTemplate.setCreateTime(LocalDateTime.now());
        messageTemplate.setUpdateTime(LocalDateTime.now());
        messageTemplateMapper.insert(messageTemplate);
        //rocketmq服务中事先应该存在该发送消息的topic
        //这里的s其实就是TopicConstant.TEMPLATE_CHANGE_TOPIC
        transactionCommitHandler.handle(TopicConstant.TEMPLATE_CHANGE_TOPIC, s -> rocketMQTemplate
            .send(TopicConstant.TEMPLATE_CHANGE_TOPIC, MessageBuilder.withPayload("topic发生变化").build()));


		// transactionCommitHandler.handle(TopicConstant.TEMPLATE_CHANGE_TOPIC, new Consumer<String>() {
        //     @Override
        //     public void accept(String s) {
        //         rocketMQTemplate.send(TopicConstant.TEMPLATE_CHANGE_TOPIC,
        //             MessageBuilder.withPayload("topic发生变化").build()));
        //     }
        // });

}

service层 需要由Transactional注解修饰 事务才可奏效

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addMessageTemplate(AddMessageTemplateRequest request, Boolean enable) {
        messageTemplateDao.insertMessageTemplate(messageTemplateEntity);
    }

参考博客

这里用到了Consumer 函数式接口,大家有时间可以了解一下。

这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值