`

SpringBoot事务管理

阅读更多
1. SpringBoot之事物管理@Transactional

1) 正常业务

新建项目SpringDataTransaction

src/main/java/com/andrew/entity/Account.java

package com.andrew.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "t_account")
public class Account {
    @Id
    @GeneratedValue
    private Integer id;
    @Column(length = 50)
    private String userName;
    private float balance;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public float getBalance() {
        return balance;
    }
    public void setBalance(float balance) {
        this.balance = balance;
    }
}

HelloWorldApplication.java右键Run As选择Spring Boot App

数据库生产t_account表
insert into t_account values(1, 700, 'zhangsan');
insert into t_account values(2, 300, 'lisi');

src/main/java/com/andrew/dao/AccountDao.java

package com.andrew.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.andrew.entity.Account;
public interface AccountDao extends JpaRepository<Account, Integer> {

}

src/main/java/com/andrew/service/AccountService.java

package com.andrew.service;
public interface AccountService {
    public void transferAccounts(int fromUser,int toUser,float account);
}

src/main/java/com/andrew/service/impl/AccountServiceImpl.java

package com.andrew.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.andrew.dao.AccountDao;
import com.andrew.entity.Account;
import com.andrew.service.AccountService;

@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Resource
    private AccountDao accountDao;
    public void transferAccounts(int fromUser, int toUser, float account) {
        Account fromAccount = accountDao.getOne(fromUser);
        fromAccount.setBalance(fromAccount.getBalance() - account);
        accountDao.save(fromAccount);
        Account toAccount = accountDao.getOne(toUser);
        toAccount.setBalance(toAccount.getBalance() + account);
        accountDao.save(toAccount);
    }
}

src/main/java/com/andrew/controller/AccountController.java

package com.andrew.controller;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.andrew.service.AccountService;

@RestController
@RequestMapping("/account")
public class AccountController {
    @Resource
    private AccountService accoutService;
    @RequestMapping("/transfer")
    public String transferAccount(){
        try {
            accoutService.transferAccounts(1, 2, 200);        
            return "OK";
        } catch(Exception e) {
            return "NO";
        }
    }
}

src/main/resources/application.properties

server.port=8000
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    </dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

http://localhost:8000/account/transfer
运行结果:
YES
1    700    zhangsan
2    300    lisi


2) 增加异常

src/main/java/com/andrew/service/impl/AccountServiceImpl.java

package com.andrew.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.andrew.dao.AccountDao;
import com.andrew.entity.Account;
import com.andrew.service.AccountService;

@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Resource
    private AccountDao accountDao;
    public void transferAccounts(int fromUser, int toUser, float account) {
        Account fromAccount = accountDao.getOne(fromUser);
        fromAccount.setBalance(fromAccount.getBalance() - account);
        accountDao.save(fromAccount);
        Account toAccount = accountDao.getOne(toUser);
        toAccount.setBalance(toAccount.getBalance() + account);
        accountDao.save(toAccount);
    }
}

http://localhost:8000/account/transfer
运行结果:
NO
1    500    zhangsan
2    300    lisi


3) 增加异常,增加事务

src/main/java/com/andrew/service/impl/AccountServiceImpl.java

package com.andrew.service.impl;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.andrew.dao.AccountDao;
import com.andrew.entity.Account;
import com.andrew.service.AccountService;

@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Resource
    private AccountDao accountDao;
    @Transactional
    public void transferAccounts(int fromUser, int toUser, float account) {
        Account fromAccount = accountDao.getOne(fromUser);
        fromAccount.setBalance(fromAccount.getBalance() - account);
        accountDao.save(fromAccount);
        Account toAccount = accountDao.getOne(toUser);
        toAccount.setBalance(toAccount.getBalance() + account);
        accountDao.save(toAccount);
    }
}

http://localhost:8000/account/transfer
运行结果:
NO
1    700    zhangsan
2    300    lisi
分享到:
评论

相关推荐

    详解Springboot事务管理

    Springboot事务管理详解 Springboot事务管理是指在Spring Boot框架中对事务的管理和控制。事务管理是指在多个操作步骤中,如果某一步骤出现错误,整个操作步骤都可以回退到初始状态,保证数据的一致性和完整性。 ...

    spring boot注解事务+多线程

    在Spring Boot应用中,事务管理和多线程是两个非常关键的特性,特别是在处理复杂的业务逻辑时。本示例将深入探讨如何使用注解来实现事务控制以及如何在Spring Boot中运用多线程。 首先,让我们关注"注解事务"。在...

    SpringBoot视频教程 百度云

    09-SpringBoot事务管理 10-SpringBoot集成多数据源 11-SpringBoot集成MybatisPlus 12-MybatisPlus使用介绍 13-SpringBoot集成lombok 14-SpringBoot集成Shiro 15-Shiro登录控制 16-Shiro角色权限控制 17-SpringBoot...

    SpringBoot最新教程(精辟)

    09-SpringBoot事务管理 10-SpringBoot集成多数据源 11-SpringBoot集成MybatisPlus 12-MybatisPlus使用介绍 13-SpringBoot集成lombok 14-SpringBoot集成Shiro 15-Shiro登录控制 16-Shiro角色权限控制 17-SpringBoot...

    SpringBoot视频教程

    09-SpringBoot事务管理 10-SpringBoot集成多数据源 11-SpringBoot集成MybatisPlus 12-MybatisPlus使用介绍 13-SpringBoot集成lombok 14-SpringBoot集成Shiro 15-Shiro登录控制 16-Shiro角色权限控制 17-SpringBoot...

    SpringBoot-Mybatis处理事务

    在SpringBoot框架中整合Mybatis进行事务管理是常见的开发实践,这主要涉及到Spring的声明式事务管理和Mybatis的事务配置。下面将详细讲解这个主题。 首先,SpringBoot简化了Spring的配置,使得开发者可以快速搭建...

    springboot班级事务管理.zip

    采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...

    java-springboot班级事务管理毕业设计程序.zip

    采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...

    springboot图书管理系统

    通过XML配置或注解的方式,开发者可以轻松地进行数据库操作,如增删改查,同时支持事务管理和数据验证。 接下来,让我们关注系统中的核心模块——图书管理。这个模块通常包括图书的分类、添加、检索、借阅和归还等...

    springboot-redis事务

    在处理Redis事务时,我们需要根据实际需求选择合适的方法,可能是简单的`MULTI/EXEC`,也可能是基于Lua脚本的分布式事务,甚至采用更复杂的分布式事务管理框架。理解这些概念和技术,有助于我们在实际项目中更好地...

    SpringBoot CRUD + 事务 DEMO

    在这个"SpringBoot CRUD + 事务 DEMO"中,我们将深入探讨如何在SpringBoot中实现基本的数据操作(CRUD)以及事务管理。 首先,CRUD代表创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete),是数据库操作的...

    springboot-jpa atomikos 分布式事务管理

    本文将详细讲解"springboot-jpa atomikos 分布式事务管理"这一主题,以及如何在SpringBoot 2.0.5版本中结合JPA、Hibernate和MyBatis实现多数据库事务控制。 首先,SpringBoot是一个简化Spring应用开发的框架,它...

    springboot多数据源即分布式事务解决方案

    SpringBoot作为一款轻量级的框架,提供了便捷的多数据源配置和分布式事务管理方案,使得开发者能够高效地管理和操作不同的数据库。本文将详细探讨SpringBoot如何实现多数据源以及分布式事务。 首先,我们要理解什么...

    基于SpringBoot人事管理系统的设计与实现.zip

    在现代企业运营中,人事管理系统的存在至关重要,它能够有效地处理员工信息、考勤记录、薪资计算、福利发放等事务,提高人力资源部门的工作效率。本文将深入探讨如何利用SpringBoot框架构建一个高效、稳定、易于维护...

    springboot手动事务回滚的实现代码

    一、SpringBoot事务管理的基本概念 在SpringBoot中,事务管理是通过@Transaction注解和PlatformTransactionManager实现的。@Transaction注解用于标记事务方法,而PlatformTransactionManager则是事务管理器,负责...

    springboot中事务管理@Transactional的注意事项与使用场景

    SpringBoot 中事务管理 @Transactional 的注意事项与使用场景 在本篇文章中,我们将详细讲解 SpringBoot 中事务管理 @Transactional 的注意事项与使用场景,以帮助开发者更好地理解和使用 @Transactional 注解。 ...

    springboot后台管理项目【完整版】.zip

    Spring框架还包括数据访问/集成、Web、测试、事务管理和更多其他功能模块。Spring的模块化设计使得开发者可以根据项目需求选择性地使用。 【Dubbo框架】 Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,...

    【SpringBoot】员工管理系统狂神篇

    例如,引入了JPA依赖,Spring Boot会自动配置数据源、事务管理器、实体扫描等。 5. **YAML/Properties配置** Spring Boot支持使用YAML或Properties文件进行配置,方便管理各种应用设置。在员工管理系统中,这可能...

    SpringBoot事务使用及回滚实现代码详解

    SpringBoot事务使用及回滚实现代码详解 SpringBoot事务使用及回滚实现代码详解是SpringBoot框架中的一项重要功能,用于确保事务的一致性和可靠性。事务是指一组操作的集合,作为一个单元执行,如果其中任何一个操作...

    浅谈SpringBoot之事务处理机制

    自动配置的事务管理器是Spring Boot自动提供的,手动配置的事务管理器需要我们自己定义。 SpringBoot之事务处理机制是Spring框架中的一种机制,用于管理事务。它提供了统一的机制来处理不同数据访问技术的事务处理...

Global site tag (gtag.js) - Google Analytics