当前位置:首页 > Java

java如何加入事务

2026-03-20 23:03:29Java

Java 加入事务的方法

在 Java 中,事务管理通常通过框架或原生 API 实现,以下是几种常见方式:

使用 Spring 声明式事务

通过 @Transactional 注解实现事务管理,适用于 Spring 或 Spring Boot 项目。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void updateUser(User user) {
        userRepository.save(user);
        // 其他数据库操作
    }
}

配置事务管理器(Spring Boot 自动配置默认已包含):

@Configuration
@EnableTransactionManagement
public class AppConfig {
    // 数据源和事务管理器配置(Spring Boot 自动配置)
}

使用编程式事务

通过 TransactionTemplatePlatformTransactionManager 手动控制事务:

@Service
public class UserService {
    @Autowired
    private TransactionTemplate transactionTemplate;

    @Autowired
    private UserRepository userRepository;

    public void updateUser(User user) {
        transactionTemplate.execute(status -> {
            userRepository.save(user);
            // 其他操作
            return null;
        });
    }
}

JDBC 原生事务

直接通过 JDBC API 管理事务:

Connection conn = dataSource.getConnection();
try {
    conn.setAutoCommit(false); // 开启事务
    // 执行SQL操作
    conn.commit(); // 提交事务
} catch (SQLException e) {
    conn.rollback(); // 回滚事务
} finally {
    conn.setAutoCommit(true);
    conn.close();
}

JTA 分布式事务

适用于跨多个资源的事务管理(如数据库 + 消息队列):

@Inject
private UserTransaction userTransaction;

public void distributedOperation() throws Exception {
    userTransaction.begin();
    try {
        // 操作数据库
        // 操作消息队列
        userTransaction.commit();
    } catch (Exception e) {
        userTransaction.rollback();
    }
}

事务传播行为配置

Spring 的 @Transactional 支持多种传播行为,例如:

@Transactional(propagation = Propagation.REQUIRED) // 默认值,支持当前事务,不存在则新建
@Transactional(propagation = Propagation.REQUIRES_NEW) // 新建事务,挂起当前事务
@Transactional(propagation = Propagation.NESTED) // 嵌套事务

事务隔离级别配置

可指定事务隔离级别:

java如何加入事务

@Transactional(isolation = Isolation.READ_COMMITTED) // 读已提交
@Transactional(isolation = Isolation.SERIALIZABLE) // 串行化

注意事项

  • 确保事务方法内的异常能被正确捕获并触发回滚(默认对 RuntimeException 回滚)
  • 避免在事务方法中处理耗时非数据库操作
  • 分布式事务需考虑性能影响,优先考虑本地事务+最终一致性方案

标签: 事务java
分享给朋友:

相关文章

如何查看java版本

如何查看java版本

查看 Java 版本的方法 通过命令行工具 打开终端(Windows 为命令提示符或 PowerShell,macOS/Linux 为 Terminal),输入以下命令并回车: java -ve…

java如何输入

java如何输入

使用Scanner类进行输入 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读取数据。需要导入java.util.Scanner包。 基本语法: Scanner sca…

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

如何配置java环境变量

如何配置java环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…