在这个示例中,
TransactionUtils
类定义了一个runInTransaction
方法,该方法接受一个TransactionalTask
作为参数,并使用Spring的事务管理器来开启和提交事务。将此类注入到其他服务类中,并使用它来控制事务处理。例如,假设您有一个UserService类,该类需要在事务中保存用户数据。可以将
TransactionUtils
注入到UserService中,并使用它来执行具有事务功能的代码块:
@FunctionalInterface
public interface TransactionalTask {
void run();
}
@Component
public class TransactionUtils {
//PlatformTransactionManager是Spring框架中用于管理事务的接口。它提供了开启、提交、回滚和验证事务状态等方法
private final PlatformTransactionManager transactionManager;
public TransactionUtils(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public void runInTransaction(TransactionalTask task) {
//DefaultTransactionDefinition是Spring框架中的一个默认事务定义类。它实现了//TransactionDefinition接口,提供了一些常用的事务属性和默认值。
//在示例代码中,我们使用DefaultTransactionDefinition来创建一个新的事务定义对象,以便开启新的事务并获取对应的事务状态。
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
task.run();
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
throw e;
}
}
}
这个示例中,UserService
类注入了TransactionUtils
和UserRepository
,并在saveUser
方法中使用了transactionUtils.runInTransaction
来实现具有事务功能的保存用户数据操作。
@Service
public class UserService {
private final TransactionUtils transactionUtils;
private final UserRepository userRepository;
@Autowired
public UserService(TransactionUtils transactionUtils, UserRepository userRepository) {
this.transactionUtils = transactionUtils;
this.userRepository = userRepository;
}
public void saveUser(User user) {
transactionUtils.runInTransaction(() -> {
userRepository.save(user);
});
}
}
也可以用 @Resource 注入