import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class MyService {
private final JdbcTemplate jdbcTemplate;
private final PlatformTransactionManager transactionManager;
public MyService(JdbcTemplate jdbcTemplate, PlatformTransactionManager transactionManager) {
this.jdbcTemplate = jdbcTemplate;
this.transactionManager = transactionManager;
}
public void performTransactionalOperation() {
// 定义事务属性
DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
// 获取事务状态
TransactionStatus status = transactionManager.getTransaction(transactionDefinition);
try {
// 执行数据库操作
jdbcTemplate.update("INSERT INTO my_table (id, name) VALUES (?, ?)", 1, "John");
// 执行其他操作
// ...
// 提交事务
transactionManager.commit(status);
} catch (Exception ex) {
// 回滚事务
transactionManager.rollback(status);
throw ex;
}
}
}
在这个例子中,performTransactionalOperation方法中的数据库操作会在一个事务中执行。通过PlatformTransactionManager接口和TransactionStatus对象,你可以手动控制事务的开始、提交、回滚等操作。
在实际应用中,建议使用声明式事务管理(例如使用@Transactional注解),因为它更简洁,而且不需要手动处理事务的开始和结束。但在某些情况下,编程式事务管理可能是更灵活的选择,例如在需要在运行时动态地控制事务的属性时。
转载请注明出处:http://www.pingtaimeng.com/article/detail/6965/Spring