Perform other operations after the springboot transaction

Code directly

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 layer call

@Override
    public void insertMessageTemplate(MessageTemplate messageTemplate) {
        messageTemplate.setCreateTime(LocalDateTime.now());
        messageTemplate.setUpdateTime(LocalDateTime.now());
        messageTemplateMapper.insert(messageTemplate);
        //rocketmq服务中事先应该存在该发送消息的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()));
        //     }
        // });

}

The service layer needs to be modified by Transactional annotations to be effective

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

Reference blog

Consumer functional interface is used here, you can find out if you have time.

Persistence or non-persistence in this life is not terrible. What I am afraid of is walking on the road of persistence alone! ! !

Guess you like

Origin blog.csdn.net/taiguolaotu/article/details/113574266