java 如何添加事务
在 Java 中添加事务的方法
Java 中可以通过多种方式实现事务管理,以下是常见的几种方法:
使用 JDBC 事务管理
JDBC 提供了基本的事务管理功能,可以通过 Connection 对象控制事务:
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false); // 关闭自动提交,开启事务
// 执行 SQL 操作
Statement stmt1 = conn.createStatement();
stmt1.executeUpdate("UPDATE account SET balance = balance - 100 WHERE user = 'A'");
Statement stmt2 = conn.createStatement();
stmt2.executeUpdate("UPDATE account SET balance = balance + 100 WHERE user = 'B'");
conn.commit(); // 提交事务
} catch (SQLException e) {
if (conn != null) {
conn.rollback(); // 发生异常时回滚
}
} finally {
if (conn != null) {
conn.setAutoCommit(true); // 恢复自动提交
conn.close();
}
}
使用 Spring 声明式事务
Spring 框架提供了更简洁的声明式事务管理:
- 配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
-
在方法上添加
@Transactional注解
@Service public class AccountService { @Autowired private JdbcTemplate jdbcTemplate; @Transactional public void transferMoney() { jdbcTemplate.update("UPDATE account SET balance = balance - 100 WHERE user = 'A'"); jdbcTemplate.update("UPDATE account SET balance = balance + 100 WHERE user = 'B'"); } }
使用 JTA 分布式事务
对于需要跨多个资源的事务,可以使用 JTA:
UserTransaction utx = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
try {
utx.begin();
// 操作数据库1
// 操作数据库2
// 发送JMS消息等
utx.commit();
} catch (Exception e) {
utx.rollback();
}
事务隔离级别设置
可以通过以下方式设置事务隔离级别:

-
JDBC 方式
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); -
Spring 方式
@Transactional(isolation = Isolation.READ_COMMITTED) public void someMethod() { // 方法实现 }
事务传播行为
Spring 支持多种事务传播行为:
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
// 如果当前没有事务,就新建一个事务
// 如果已经存在事务,就加入当前事务
}
以上方法涵盖了 Java 中实现事务管理的主要方式,开发者可以根据具体需求选择适合的方案。






