Spring Boot @Transactional实例

2 篇文章 0 订阅

spring boot 会自动配置一个 DataSourceTransactionManager,我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了。

简单的使用方法
@Override
@Transactional
@TargetDataSource(name = “localhost2”)
public int saveUser(UserInfo user) throws Exception {
// TODO Auto-generated method stub
if(userdao.findById(user.getId()) != null) {
System.out.println(“save 失败”);
throw new Exception(“save 失败”);
}
String sql = “INSERT INTO userinfo VALUES(?,?,?)”;
int num = userdao.update(sql, new Object[] {user.getId(),user.getName(),user.getPassword()});

return num;
}

@Transactional 注解的属性介绍

propagation 属性
事务的传播行为,默认值为 Propagation.REQUIRED。

可选的值有:

Propagation.REQUIRED

如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。

Propagation.SUPPORTS

如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。

Propagation.MANDATORY

如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。

Propagation.REQUIRES_NEW

重新创建一个新的事务,如果当前存在事务,暂停当前的事务。

Propagation.NOT_SUPPORTED

以非事务的方式运行,如果当前存在事务,暂停当前的事务。

Propagation.NEVER

以非事务的方式运行,如果当前存在事务,则抛出异常。

Propagation.NESTED

和 Propagation.REQUIRED 效果一样。

这些概念理解起来实在是有点儿抽象,后文会用代码示例解释说明。

isolation 属性
事务的隔离级别,默认值为 Isolation.DEFAULT。

可选的值有:

Isolation.DEFAULT

使用底层数据库默认的隔离级别。

Isolation.READ_UNCOMMITTED
Isolation.READ_COMMITTED
Isolation.REPEATABLE_READ
Isolation.SERIALIZABLE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,可以使用@Transactional注解来标记需要进行事务处理的方法。以下是一个简单的示例: 首先,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 然后,在application.properties文件中配置数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 接下来,创建一个UserService类,在其中定义一个添加用户的方法: ``` @Service public class UserService { @Autowired private JdbcTemplate jdbcTemplate; @Transactional public void addUser(User user) { jdbcTemplate.update("insert into user(name, age) values (?, ?)", user.getName(), user.getAge()); // 抛出异常,触发事务回滚 // throw new RuntimeException("添加用户失败"); } } ``` 在方法上添加@Transactional注解,表示该方法需要进行事务处理。如果在方法执行过程中发生异常,事务被回滚,数据不被插入到数据库中。 最后,创建一个Controller类,在其中调用UserService的addUser方法: ``` @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/user") public String addUser(User user) { userService.addUser(user); return "success"; } } ``` 当调用addUser方法时,如果出现异常,事务被回滚,数据不被插入到数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值