zoukankan      html  css  js  c++  java
  • seata 分布式事务 -- seata-three工程完整代码

    工程结构 ,启动类 ,数据库主键生成工具类(雪花算法) 跟 seata-one 一致

    入口  controller:

    package com..controller;

    import com..service.Rm_Three_Interface;
    import com..service.Rm_Three_Service;
    import io.seata.spring.annotation.GlobalTransactional;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    public class Rm_Three_Controller {


    @Autowired
    private Rm_Three_Service rm_three_service;

    @Autowired
    private Rm_Three_Interface rm_three_interface;


    @RequestMapping("/three_at")
    public String rm3(){

    String result = rm_three_service.rm3();
    System.out.println(1/0);
    if(result.equals("err")){
    return "err";
    }
    return "success_"+result;

    }


    @RequestMapping("/three_tcc")
    @GlobalTransactional(rollbackFor = Exception.class)
    public String oneTcc() throws InterruptedException {
    rm_three_interface.rm3(null);
    return "success";
    }



    }
     

      

    数据库实体类:

    package com..entity;


    public class TblthreeInfo {

    private String id;


    private String name;


    public String getId() {
    return id;
    }


    public void setId(String id) {
    this.id = id;
    }


    public String getName() {
    return name;
    }


    public void setName(String name) {
    this.name = name == null ? null : name.trim();
    }
    }

    mapper:

    package com..mapper;

    import com..entity.TblthreeInfo;
    import org.apache.ibatis.annotations.Mapper;
    import org.springframework.stereotype.Component;

    import java.util.List;

    @Mapper
    @Component(value = "TblthreeInfoMapper")
    public interface TblthreeInfoMapper {

    int deleteByPrimaryKey(String id);


    int insert(TblthreeInfo record);


    TblthreeInfo selectByPrimaryKey(String id);


    List<TblthreeInfo> selectAll();


    int updateByPrimaryKey(TblthreeInfo record);
    }

    AT 模式 实现类:

    package com..service;

    import com..entity.TblthreeInfo;
    import com..mapper.TblthreeInfoMapper;
    import com..sqlToJava.SnowFlake;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    @Service
    public class Rm_Three_Service {

    @Autowired
    TblthreeInfoMapper tblthreeInfoMapper;

    public String rm3(){

    long id = SnowFlake.nextId();
    TblthreeInfo tblthreeInfo = new TblthreeInfo();
    tblthreeInfo.setId(id+"");
    tblthreeInfo.setName("Rm_Three_"+id);

    int insert = tblthreeInfoMapper.insert(tblthreeInfo);

    if (insert==1){
    return id+"";
    }
    return "err";
    }

    }

    TCC模式 接口 / 实现类:

    接口:

    package com..service;
    import io.seata.rm.tcc.api.BusinessActionContext;
    import io.seata.rm.tcc.api.LocalTCC;
    import io.seata.rm.tcc.api.TwoPhaseBusinessAction;

    @LocalTCC
    public interface Rm_Three_Interface {

    @TwoPhaseBusinessAction(name = "rm3TccAction",commitMethod = "rm3Commit",rollbackMethod = "rm3Rollback")
    public String rm3(BusinessActionContext businessActionContext);

    public boolean rm3Commit(BusinessActionContext businessActionContext);

    public boolean rm3Rollback(BusinessActionContext businessActionContext);


    }


    实现类:

    package com..service;

    import com..entity.TblthreeInfo;
    import com..mapper.TblthreeInfoMapper;
    import com..sqlToJava.SnowFlake;
    import io.seata.rm.tcc.api.BusinessActionContext;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.transaction.annotation.Transactional;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ConcurrentMap;

    @Component
    public class Rm_Three_InterfaceImpl implements Rm_Three_Interface {

    @Autowired
    TblthreeInfoMapper tblthreeInfoMapper;

    private static ConcurrentMap<String,String> maps = new ConcurrentHashMap<>();

    @Override
    @Transactional
    public String rm3(BusinessActionContext businessActionContext) {

    long id = SnowFlake.nextId();
    TblthreeInfo tblthreeInfo = new TblthreeInfo();
    tblthreeInfo.setId(id+"");
    tblthreeInfo.setName("Rm_Three_"+id);
    maps.put("id",id+"");
    int insert = tblthreeInfoMapper.insert(tblthreeInfo);

    System.out.println("rm3 try....");

    // System.out.println(1/0);
    return null;
    }

    @Override
    @Transactional
    public boolean rm3Commit(BusinessActionContext businessActionContext) {

    System.out.println("rm3 rm3Commit....");
    return true;
    }

    @Override
    @Transactional
    public boolean rm3Rollback(BusinessActionContext businessActionContext) {

    String id = maps.get("id");
    int i = tblthreeInfoMapper.deleteByPrimaryKey(id);
    System.out.println("rm3 rm3Rollback...."+i);
    return true;
    }
    }

    application.yml  :


    server:
    port: 8090

    #应用名称及验证账号
    spring:
    application:
    name: seata-three


    datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3307/seata-rm-three?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    dbcp2:
    initial-size: 5
    min-idle: 5
    max-total: 5
    max-wait-millis: 200
    validation-query: SELECT 1
    test-while-idle: true
    test-on-borrow: false
    test-on-return: false

    mybatis:
    mapper-locations:
    - classpath:mapper/*.xml

    eureka:
    client:
    prefer-ip-address: true
    service-url:
    defaultZone: http://localhost:7900/eureka/

    数据库链接 TbloneInfoMapper.xml:

    (项目地址需要根据情况补充)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com..mapper.TblthreeInfoMapper">
    <resultMap id="BaseResultMap" type="com..entity.TblthreeInfo">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    <id column="id" jdbcType="VARCHAR" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    </resultMap>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    delete from tbl_three
    where id = #{id,jdbcType=INTEGER}
    </delete>
    <insert id="insert" parameterType="com..entity.TblthreeInfo">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    insert into tbl_three (id, name)
    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR})
    </insert>
    <update id="updateByPrimaryKey" parameterType="com..entity.TblthreeInfo">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    update tbl_three
    set name = #{name,jdbcType=VARCHAR}
    where id = #{id,jdbcType=VARCHAR}
    </update>
    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    select id, name
    from tbl_three
    where id = #{id,jdbcType=VARCHAR}
    </select>
    <select id="selectAll" resultMap="BaseResultMap">
    <!--
    WARNING - @mbg.generated
    This element is automatically generated by MyBatis Generator, do not modify.
    This element was generated on Mon May 17 11:25:15 CST 2021.
    -->
    select id, name
    from tbl_three
    </select>
    </mapper>

    pom:

    (<groupId>com.</groupId> 需要根据情况补充 )

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.</groupId>
    <artifactId>seata-three</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>seata-three</name>
    <description>seata-three</description>
    <properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>2020.0.2</spring-cloud.version>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <!-- euekea 依赖-->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!-- mysql:MyBatis相关依赖-->
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
    </dependency>

    <!-- 整合MyBatis java类依赖 -->
    <dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.4.0</version>
    <type>maven-plugin</type>
    </dependency>

    <!-- mysql:mysql驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- mysql:阿里巴巴数据库连接池 -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
    </dependency>
    <!-- JSONObject -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.60</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-seata</artifactId>
    <version>2.2.0.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-commons</artifactId>
    <version>3.0.2</version>
    </dependency>
    </dependencies>
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>

    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>

    </project>
  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/lifan12589/p/14781696.html
Copyright © 2011-2022 走看看