巧用函数式接口优化Spring事务管理:详解封装与应用

115 阅读1分钟

通过函数式接口简化Spring事务管理,实现代码模块化与高效事务处理。本教程详细介绍如何封装事务逻辑,提升代码可读性和可维护性。

首先,定义一个函数式接口:

@FunctionalInterface
public interface TransactionalTask {
    void execute() throws Exception;
}

然后,创建一个实用方法来执行事务,并传递函数式接口的实现:

public void executeTransactionalTask(TransactionalTask task) {
    TransactionDefinition definition = new DefaultTransactionDefinition();
    PlatformTransactionManager transactionManager = SpringUtils.getBean(PlatformTransactionManager.class);
    TransactionStatus transactionStatus = transactionManager.getTransaction(definition);

    try {
        task.execute();
        transactionManager.commit(transactionStatus);
    } catch (Exception e) {
        transactionManager.rollback(transactionStatus);
        e.printStackTrace();
        // 可根据实际需求处理异常
    }
}

最后,将你的 runTask 方法改造为使用这个实用方法:

public void runTask() {
    executeTransactionalTask(() -> {
        // 数据重复处理规则(0:整批退出;1:跳过;2:覆盖;)
        String repeathandle = imBills.getRepeathandle();
        if (StrUtil.equals("0", repeathandle)) {
            return;
        }

        Map<String, Object> paramMap = new HashMap<>();
        String filter = "billid='" + imBills.getId() + "' and state ='待处理'";
        paramMap.put("iscj", iscj);
        paramMap.put("isgl", isgl);
        paramMap.put("filter", filter);
        paramMap.put("loginUser", loginUser);
        paramMap.put("imBills", imBills);
        paramMap.put("billid", imBills.getId());

        importBS.doFastImport(paramMap);
    });
}

这个结构允许你将事务管理逻辑与实际业务逻辑分离,使代码更具模块化和可读性。如果出现异常,事务将回滚,并打印异常信息。