SpringBoot2.x系列教程68--JPA+Jta-atomikos实现分布式事务

本教程详细介绍了如何在SpringBoot2.2.5项目中,结合JPA和jta-atomikos实现多数据源环境下的分布式事务。从创建数据库表开始,逐步讲解了web项目搭建、依赖添加、配置文件设置、数据源实体类、仓库类、服务类、控制器的创建,以及事务管理器配置。通过测试接口展示了在正常和异常情况下分布式事务的回滚机制。
摘要由CSDN通过智能技术生成

我在上一章节中介绍了分布式事务的相关理论知识,本章节中我会在SpringBoot中结合JPA,整合jta-atomikos来实现多数据源环境下的分布式事务。

一. 多数据源环境下分布式事务代码实现

代码环境:

  • Spring Boot2.2.5
  • mysql-connector-java8.0.11

创建数据库对应的表

db1数据库中的goods表:

db4数据库中的user表:

1. 创建web项目

我们按照之前的经验,创建一个web程序,并将之改造成Spring Boot项目,具体过程略。

2. 添加依赖包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <!--版本不能太高-->
    <version>8.0.11</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
</dependency>

要注意mysql-connector-java的版本不要太高,否则可能会产生一些异常。

3. 创建application.yml配置文件

spring:
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: update
    database-platform: org.hibernate.dialect.MySQL57Dialect

4. 创建两个数据源对应的实体类

db1数据源的实体类Goods

package com.yyg.boot.entity.db1;

import lombok.Data;

import javax.persistence.*;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/3
 * @Description db1中的商品表
 */
@Entity
@Table(name = "goods")
@Data
public class Goods {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private String name;

}

db4数据源的实体类User

package com.yyg.boot.entity.db2;

import lombok.Data;
import lombok.ToString;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/3
 * @Description db4中的用户表
 */
@Entity
@Table(name = "user")
@Data
@ToString
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column
    private String username;

    @Column
    private Date birthday;

    @Column
    private String sex;

    @Column
    private String address;

}

5. 创建2个数据源仓库类

db1数据源仓库类GoodsRepository

package com.yyg.boot.dao.db01;

import com.yyg.boot.entity.db1.Goods;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/3
 * @Description Description
 */
@Repository
public interface GoodsRepository extends JpaRepository<Goods, Long>,JpaSpecificationExecutor<Goods> {
}

db4数据源仓库类UserRepository

package com.yyg.boot.dao.db02;

import com.yyg.boot.entity.db2.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

/**
 * @Author 一一哥Sun
 * 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值