全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Spring事务管理接口PlatformTransactionManager

PlatformTransactionManager是Spring事务抽象的核心接口。

接口定义

Java
public interface PlatformTransactionManager extends TransactionManager {

    // 获取事务状态
    TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
            throws TransactionException;

    // 提交事务
    void commit(TransactionStatus status) throws TransactionException;

    // 回滚事务
    void rollback(TransactionStatus status) throws TransactionException;
}

核心接口关系

Java
┌─────────────────────────────────────────────────────┐
│            PlatformTransactionManager               │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐   │
│  │getTransaction│ │   commit   │ │  rollback  │   │
│  └─────────────┘ └─────────────┘ └─────────────┘   │
└─────────────────────────────────────────────────────┘
                         ↓ 实现
┌─────────────────────────────────────────────────────┐
│           DataSourceTransactionManager              │
│           JpaTransactionManager                     │
│           HibernateTransactionManager               │
│           JtaTransactionManager                     │
└─────────────────────────────────────────────────────┘

TransactionDefinition - 事务定义

Java
public interface TransactionDefinition {

    // 传播行为
    int getPropagationBehavior();

    // 隔离级别
    int getIsolationLevel();

    // 超时时间
    int getTimeout();

    // 是否只读
    boolean isReadOnly();

    // 事务名称
    String getName();
}

TransactionStatus - 事务状态

Java
public interface TransactionStatus extends SavepointManager, TransactionExecution {

    // 是否是新事务
    boolean isNewTransaction();

    // 是否有保存点
    boolean hasSavepoint();

    // 设置仅回滚
    void setRollbackOnly();

    // 是否仅回滚
    boolean isRollbackOnly();

    // 是否已完成
    boolean isCompleted();

    // 创建保存点
    Object createSavepoint() throws TransactionException;

    // 回滚到保存点
    void rollbackToSavepoint(Object savepoint) throws TransactionException;

    // 释放保存点
    void releaseSavepoint(Object savepoint) throws TransactionException;
}

常用实现类

DataSourceTransactionManager

Java
@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        ds.setUsername("root");
        ds.setPassword("password");
        return ds;
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

JpaTransactionManager

Java
@Configuration
@EnableJpaRepositories("com.example.repository")
public class JpaConfig {

    @Bean
    public PlatformTransactionManager transactionManager(
            EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory);
        return txManager;
    }
}

多事务管理器

Java
@Configuration
public class MultiDataSourceConfig {

    @Bean
    @Primary
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/primary")
                .build();
    }

    @Bean
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/secondary")
                .build();
    }

    @Bean
    @Primary
    public PlatformTransactionManager primaryTxManager(
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public PlatformTransactionManager secondaryTxManager(
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

// 使用指定事务管理器
@Service
public class OrderService {

    @Transactional("primaryTxManager")
    public void saveToPrimary(Order order) { }

    @Transactional(transactionManager = "secondaryTxManager")
    public void saveToSecondary(Order order) { }
}

编程式事务

使用TransactionTemplate

Java
@Service
public class PaymentService {

    @Autowired
    private TransactionTemplate transactionTemplate;

    public void processPayment(Payment payment) {
        transactionTemplate.execute(status -> {
            try {
                accountDao.decrease(payment.getFromAccount(), payment.getAmount());
                accountDao.increase(payment.getToAccount(), payment.getAmount());
            } catch (Exception e) {
                status.setRollbackOnly();
                throw e;
            }
            return null;
        });
    }

    // 有返回值的事务
    public Long createOrder(OrderRequest request) {
        return transactionTemplate.execute(status -> {
            Order order = new Order(request);
            orderDao.insert(order);
            return order.getId();
        });
    }
}

直接使用PlatformTransactionManager

Java
@Service
public class ManualTxService {

    @Autowired
    private PlatformTransactionManager transactionManager;

    public void manualTransaction() {
        TransactionDefinition definition = new DefaultTransactionDefinition();
        TransactionStatus status = transactionManager.getTransaction(definition);

        try {
            // 业务操作
            doSomething();

            // 提交
            transactionManager.commit(status);
        } catch (Exception e) {
            // 回滚
            transactionManager.rollback(status);
            throw e;
        }
    }
}

保存点使用

text
@Service
public class BatchService {

    @Autowired
    private PlatformTransactionManager transactionManager;

    public void batchWithSavepoint() {
        DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
        TransactionStatus status = transactionManager.getTransaction(definition);

        try {
            for (int i = 0; i < 10; i++) {
                Object savepoint = status.createSavepoint();
                try {
                    processItem(i);
                } catch (Exception e) {
                    // 回滚到保存点,继续处理下一个
                    status.rollbackToSavepoint(savepoint);
                    status.releaseSavepoint(savepoint);
                }
            }
            transactionManager.commit(status);
        } catch (Exception e) {
            transactionManager.rollback(status);
        }
    }
}

实现类对比

实现类适用场景数据源
DataSourceTransactionManagerJDBC/MyBatis单数据源
JpaTransactionManagerJPA单数据源
HibernateTransactionManagerHibernate单数据源
JtaTransactionManager分布式事务多数据源

要点总结

  • PlatformTransactionManager是事务管理核心接口
  • getTransaction/commit/rollback三个核心方法
  • TransactionDefinition定义事务属性
  • TransactionStatus跟踪事务状态
  • 不同持久层框架使用对应的事务管理器
  • TransactionTemplate简化编程式事务

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring事务与数据库锁
下一篇 → 事务传播行为
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库