Spring Boot入门(4)-事务管理

avatar 2017年10月29日21:28:05 5 2325 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
事务管理一般用于确保数据的统一性和一致性,一个转账的例子很能说明。

比如甲给乙转1000元钱,首先是从数据库中将甲的钱减少1000,然后再去将乙的钱增加1000,但是如果这个时间段,突然出现异常,比如机房停电了。可能会出现甲的钱少了,乙却没收到钱,那笔钱就随异常消失了。如果使用事务管理,则不会出现上述情况。

事务的四个关键属性(ACID)

① 原子性(atomicity):事务室一个原子操作,有一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用

② 一致性(consistency):一旦所有事务动作完成,事务就被提交。数据和资源就处于一种满足业务规则的一致性状态中

③ 隔离性(isolation):可能有许多事务会同时处理相同的数据,因此每个事物都应该与其他事务隔离开来,防止数据损坏

④ 持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。通常情况下,事务的结果被写到持久化存储器中



下面通过一个例子,同时添加两个用户的方式来测试SpringBoot的事务管理。

1、UserRepository
  1. package com.liuyanzhao.blog;
  2. import org.springframework.data.jpa.repository.JpaRepository;
  3. /**
  4.  * @Author 言曌
  5.  * @DATE 2017/10/29 上午10:35
  6.  * @URL http://liuyanzhao.com
  7.  */
  8. public interface UserRepository  extends JpaRepository<User,Integer>{//表名和Id类型
  9. }



2、UserService.java
  1. package com.liuyanzhao.blog;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import org.springframework.transaction.annotation.Transactional;
  5. /**
  6.  * @Author 言曌
  7.  * @DATE 2017/10/29 下午9:02
  8.  * @URL http://liuyanzhao.com
  9.  */
  10. @Service
  11. public class UserService {
  12.     @Autowired
  13.     private UserRepository userRepository;
  14.     @Transactional
  15.     public void insertTwo() {
  16.         User user = new User();
  17.         user.setName("Tom");
  18.         user.setAge(7);
  19.         user.setGender("男");
  20.         userRepository.save(user);
  21.         User user2 = new User();
  22.         user2.setName("Jerry");
  23.         user2.setAge(5);
  24.         user2.setGender("女");
  25.         userRepository.save(user2);
  26.     }
  27. }

注意  @Transactional 注解,如果没有这个注解,一旦遇到异常,不能保证两个用户同时添加成功或者同时失败



3、UserController.java
  1. package com.liuyanzhao.blog;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.*;
  4. /**
  5.  * @Author 言曌
  6.  * @DATE 2017/10/29 上午10:33
  7.  * @URL http://liuyanzhao.com
  8.  */
  9. @RestController
  10. public class UserController {
  11.     @Autowired UserService userService;
  12.     @PostMapping(value = "/users/two")
  13.     public void insertTwo() {
  14.         userService.insertTwo();
  15.     }
  16. }



  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0