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等传播行为。