All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.biz.common.transactional.TransactionalRunner Maven / Gradle / Ivy

Go to download

BizX 是一个灵活而高效的业务开发框架, 其中也有很多为业务开发所需要的工具类的提供。

The newest version!
package com.biz.common.transactional;

import java.util.function.Supplier;

/**
 * 事务管理器接口,提供事务性操作的抽象。
 * 通过此接口,可以在需要执行事务的上下文中运行代码,确保代码的原子性、一致性和持久性。
 * 支持两种典型的操作模式:返回值的函数式编程和无返回值的命令式编程。
 *
 * 

该接口定义了在事务环境中执行操作的两种方式:一种是没有返回值的操作, * 适用于仅需确保操作的事务性而不需要返回结果的场景;另一种是有返回值的操作, * 适用于需要在事务环境中执行操作并返回结果的场景。

* *
{@code
 * // 示例用法
 * // 需要实现该接口,并将该实现类注册为Spring的Bean,同时添加@Transactional注解
 * @Component
 * @Transactional(rollbackFor = Throwable.class)
 * public class TransactionalServiceImpl implements TransactionalRunner {
 *
 *     // 出现异常时,事务会回滚,事务管理由@Transactional注解处理
 *     @Override
 *     public  TR apply(Supplier supplier) {
 *         return supplier.get();
 *     }
 *
 *     // 出现异常时,事务会回滚,事务管理由@Transactional注解处理
 *     @Override
 *     public void run(Runnable runnable) {
 *         runnable.run();
 *     }
 * }
 *
 * // 使用示例
 * @Component
 * public class UserService {
 *
 *     @Autowired
 *     private TransactionalRunner transactionalRunner;
 *
 *     @Autowired
 *     private IUserService iUserService;
 *
 *     @Autowired
 *     private IUserRoleService iUserRoleService;
 *
 *     // 添加用户以及用户角色
 *     public void addUser() {
 *         transactionalRunner.run(() -> {
 *             // 执行需要事务管理的代码
 *             // 添加用户
 *             iUserService.addUser();
 *             // 添加用户角色
 *             iUserRoleService.addUserRole();
 *         });
 *     }
 *
 * }
 * }
* * @author francis * @since 1.0.1 * @version 1.0.1 */ public interface TransactionalRunner { /** * 在事务上下文中执行无返回值的代码块。 * 此方法适用于需要执行一系列数据库操作,但不关心具体返回结果的场景。 * 事务会确保这些操作要么全部成功,要么在发生异常时全部回滚。 * * @param runnable 在事务上下文中执行的代码块。 */ void run(Runnable runnable); /** * 在事务上下文中执行有返回值的代码块。 * 此方法适用于需要在事务环境下执行操作,并返回操作结果的场景。 * 事务会确保操作的原子性,即要么全部完成,要么在异常情况下回滚。 * 返回类型为泛型,允许执行各种类型的操作并返回相应的结果。 * * @param supplier 在事务上下文中执行并返回结果的代码块。 * @param 供应商返回的结果类型。 * @return 代码块执行后的结果。 */ TR apply(Supplier supplier); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy