前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式事务系列--SpringCloud整合byteTCC框架0.4.x版本

分布式事务系列--SpringCloud整合byteTCC框架0.4.x版本

作者头像
IT云清
发布2019-03-13 15:04:47
9310
发布2019-03-13 15:04:47
举报
文章被收录于专栏:IT云清IT云清

版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!https://blog.csdn.net/weixin_39800144/article/details/87697138

本文详细记录下,SpringCloud框架整合byteTCC分布式事务框架的过程。这里只展示,一个是springboot项目,引入byteTCC必备的基础步骤,不包括tcc的业务逻辑过程。请优先确定项目使用的springboot和springcloud版本,然后选择对应的byteTCC版本进行整合,0.4.x和0.5.x整合差异较大。总体而言,spring boot 1.x得用0.4.x的版本,0.5.x版本得用spring boot 2.x
版本信息
  • 1.SpringCloud Edgware.SR4
  • 2.SpringBoot 1.5.4.RELEASE
  • 3.byteTCC 0.4.18
  • 4.jdk 7.0及以上版本
  • 5.byteTCC 0.4.x版本仅支持Spring Boot 1.x版本

1.创建bank4项目

创建一个SpringBoo web项目,先贴下完整的项目结构:

在这里插入图片描述
在这里插入图片描述

2.引入byteTCC依赖

SpringCloud其他依赖这里不做展示,仅展示byteTCC的依赖,由于gitHub提供的demo中依赖较多,可能是作者在框架内部使用了很多依赖,下面的依赖,如果没有jar冲突,建议保留,如果删除,请做个测试。(下文依赖做过多次调试和测试才保留的,建议慎重删除):

代码语言:javascript
复制
		<!--byteTCC 如果jar不冲突,建议保留,byteTCC内部可能使用了下面的各种依赖-->
		<dependency>
			<groupId>org.bytesoft</groupId>
			<artifactId>bytetcc-supports-springcloud</artifactId>
			<version>0.4.18</version>
			<exclusions>
				<exclusion>
					<groupId>asm</groupId>
					<artifactId>asm</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.3.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.37</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zipkin</artifactId>
			<version>1.2.4.RELEASE</version>
		</dependency>
		<!--byteTCC-->

3.配置文件

待修改

代码语言:javascript
复制
server:
  port: 8022
  datasource:
    url: jdbc:mysql://x.x.x.x:3306/user?useAffectedRows=true
    username: xxxx
    password: xxxxxx
    driver-class-name: com.mysql.jdbc.Driver
eureka:
  client:
    service-url:
      default: http://127.0.0.1:8761/eureka
    healthcheck:
      enabled: true
#mybatis:
#  mapper-locations: classpath:mapper/*.xml
#  type-aliases-package: com.java4all.entity

spring:
  application:
    name: bank-server4

4.配置数据源

在byteTCC 0.4.x版本中我们需要封装一下数据源,补偿型service中应该使用org.bytesoft.bytejta.supports.jdbc.LocalXADataSource封装过的数据源。0.5.x版本不需要此步骤。数据建议从配置文件取,不要在java文件中写死。

代码语言:javascript
复制
package com.java4all.config;

import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.bytesoft.bytejta.supports.jdbc.LocalXADataSource;
import org.bytesoft.bytetcc.supports.springcloud.config.SpringCloudConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 配置数据源
 *
 * 补偿型service中应该使用org.bytesoft.bytejta.supports.jdbc.LocalXADataSource封装过的数据源。
 */
@Import(SpringCloudConfiguration.class)
@Configuration
public class ProviderConfig {

	@Bean(name = "dataSource")
	public DataSource getDataSource() {
		LocalXADataSource dataSource = new LocalXADataSource();
		dataSource.setDataSource(this.invokeGetDataSource());
		return dataSource;
	}

	public DataSource invokeGetDataSource() {
		BasicDataSource bds = new BasicDataSource();
		bds.setDriverClassName("com.mysql.jdbc.Driver");
		bds.setUrl("jdbc:mysql://xx.xx.xx.xx:3306/inst01");
		bds.setUsername("xxxxx");
		bds.setPassword("xxxxx");
		bds.setMaxTotal(50);
		bds.setInitialSize(20);
		bds.setMaxWaitMillis(60000);
		bds.setMinIdle(6);
		bds.setLogAbandoned(true);
		bds.setRemoveAbandonedOnBorrow(true);
		bds.setRemoveAbandonedOnMaintenance(true);
		bds.setRemoveAbandonedTimeout(1800);
		bds.setTestWhileIdle(true);
		bds.setTestOnBorrow(false);
		bds.setTestOnReturn(false);
		bds.setValidationQuery("select 'x' ");
		bds.setValidationQueryTimeout(1);
		bds.setTimeBetweenEvictionRunsMillis(30000);
		bds.setNumTestsPerEvictionRun(20);
		return bds;
	}

	@Bean
	public JdbcTemplate getJdbcTemplate() {
		JdbcTemplate jdbcTemplate = new JdbcTemplate();
		jdbcTemplate.setDataSource(this.getDataSource());
		return jdbcTemplate;
	}

}

5.启动类

启动类中需要引入配置文件,文件由框架提供默认值,注解导入即可。

代码语言:javascript
复制
package com.java4all;

import org.bytesoft.bytetcc.supports.springcloud.config.SpringCloudConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

//引入byteTCC配置
@ImportResource({"classpath:bytetcc-supports-springcloud.xml"})
@Import(SpringCloudConfiguration.class)
//配置扫描的应用包
@SpringBootApplication(scanBasePackages = "com.java4all")
@EnableEurekaClient
@EnableDiscoveryClient
public class Bank4Application {

	public static void main(String[] args) {
		SpringApplication.run(Bank4Application.class, args);
	}

}

6.启动项目

启动项目,即可在注册中心看到项目

在这里插入图片描述
在这里插入图片描述

7.创建数据库表

在参与分布式事务操作的表所在的库,必须添加bytejta表;

这里同时添加一个user表,方便演示:

代码语言:javascript
复制
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `money` decimal(10,0) DEFAULT NULL,
  `frozen` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `bytejta` (
  `xid` varchar(32) NOT NULL,
  `gxid` varchar(40) DEFAULT NULL,
  `bxid` varchar(40) DEFAULT NULL,
  `ctime` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` (`id`, `money`, `frozen`) VALUES ('1', '10000', '0');
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文详细记录下,SpringCloud框架整合byteTCC分布式事务框架的过程。这里只展示,一个是springboot项目,引入byteTCC必备的基础步骤,不包括tcc的业务逻辑过程。请优先确定项目使用的springboot和springcloud版本,然后选择对应的byteTCC版本进行整合,0.4.x和0.5.x整合差异较大。总体而言,spring boot 1.x得用0.4.x的版本,0.5.x版本得用spring boot 2.x
  • 版本信息
  • 1.创建bank4项目
  • 2.引入byteTCC依赖
  • 3.配置文件
  • 4.配置数据源
  • 5.启动类
  • 6.启动项目
  • 7.创建数据库表
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档