跳到主要内容

3.4 事务管理 - Solon

编程式事务

与 Spring Boot 完全一致:

// 默认数据源事务
DB.Tx.run(() -> {
DB.Pojo.insert(user);
DB.Pojo.insert(userLog);
});

// 指定数据源事务
DB.Tx.run("slave", () -> {
DB.Pojo.insert(user);
});

// 带返回值
Long id = DB.Tx.run(() -> {
DB.Pojo.insert(user);
return user.getId();
});

声明式事务

使用 Solon 原生 @Tran 注解:

@Component
public class OrderService {

@Tran
public void createOrder(Order order, List<OrderItem> items) {
DB.Pojo.insert(order);
items.forEach(item -> {
item.setOrderId(order.getId());
DB.Pojo.insert(item);
});
}
}

实现说明

Solon 下 DB.Tx 基于 SolonTxExecutor + 自研 ConnectionHolder,支持 PROPAGATION_REQUIRED 语义:

  • 外层已有事务则复用连接
  • 内层异常透传给外层
  • 异常时自动回滚,包装为 DbException 抛出

Solon 版暂不支持 REQUIRES_NEW / NESTED 等传播行为。