分布式事务系列--SpringCloud整合byteTCC框架0.4.x版本
发布日期:2021-06-30 11:07:57
浏览次数:2
分类:技术文章
本文共 5636 字,大约阅读时间需要 18 分钟。
欢迎关注公众号:java4all
本文详细记录下,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冲突,建议保留,如果删除,请做个测试。(下文依赖做过多次调试和测试才保留的,建议慎重删除):
org.bytesoft bytetcc-supports-springcloud 0.4.18 asm asm org.springframework spring-beans 4.3.7.RELEASE org.springframework spring-core 4.3.7.RELEASE org.springframework spring-expression 4.3.7.RELEASE org.aspectj aspectjweaver 1.8.10 org.springframework spring-web 4.3.4.RELEASE org.springframework spring-webmvc 4.3.4.RELEASE org.apache.commons commons-dbcp2 2.1.1 mysql mysql-connector-java 5.1.37 org.springframework.cloud spring-cloud-starter-zuul org.springframework.cloud spring-cloud-starter-zipkin 1.2.4.RELEASE
3.配置文件
待修改
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.Drivereureka: 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.entityspring: application: name: bank-server4
4.配置数据源
在byteTCC 0.4.x版本中我们需要封装一下数据源,补偿型service中应该使用org.bytesoft.bytejta.supports.jdbc.LocalXADataSource封装过的数据源。0.5.x版本不需要此步骤。数据建议从配置文件取,不要在java文件中写死。
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)@Configurationpublic 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.启动类
启动类中需要引入配置文件,文件由框架提供默认值,注解导入即可。
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@EnableDiscoveryClientpublic class Bank4Application { public static void main(String[] args) { SpringApplication.run(Bank4Application.class, args); }}
6.启动项目
启动项目,即可在注册中心看到项目
7.创建数据库表
在参与分布式事务操作的表所在的库,必须添加bytejta表;
这里同时添加一个user表,方便演示:
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');
转载地址:https://it4all.blog.csdn.net/article/details/87697138 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月27日 14时57分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++WEBSOCKET客户端和服务端例子(BOOST.BEAST)
2019-04-30
查找排序算法(一)
2019-04-30
C++用BOOST解析命令行参数
2019-04-30
SECP256K1签名
2019-04-30
WINDOWS匿名管道
2019-04-30
非模式对话框的问题
2019-04-30
C++解析XML, TINYXML2的使用
2019-04-30
拷贝构造函数和移动构造函数解析
2019-04-30
COCOS2D-X主循环的委托模式的学习
2019-04-30
Python环境搭建
2019-04-30
python pip及安装包安装
2019-04-30
openssl使用
2019-04-30
集线程池应用、多次HttpWebRequest请求,自动切换账号等等的移动信息查询软件
2019-04-30
HTTP协议状态码详解(HTTP Status Code)
2019-04-30
css优先级
2019-04-30
收集各种浏览器的Hack写法
2019-04-30
CSS选择器笔记
2019-04-30
CSS3 学习+实践
2019-04-30