目录

  • 场景
  • 多数据源配置
  • 引入Atomikos
  • 测试service

1. 场景:

经常会碰到这种应用场景,比如说下订单的操作,有需要修改订单库中信息,又需要修改产品库中库存,这一个操作就是需要一次性操作两个数据源的情况,这种情况的事务控制可以使用Atomikos框架进行实现

2. 多数据源配置

参考:http://www.chengqj.com/info.html?id=33

3. 引入Atomikos

  1. 引入jar包
  2. 修改DataSourceConfig

3.1 引入jar包

    implementation('org.springframework.boot:spring-boot-starter-jta-atomikos')

3.2 修改DataSourceConfig


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;import javax.sql.DataSource;
import java.util.Properties;/*** @program: twodatasource* @description: 数据源* @author: chengqj* @create: 2018-10-24 11:39**/
@Configuration
public class DataSourceConfig {@Bean(name = "ds1")// application.properteis中对应属性的前缀@ConfigurationProperties(prefix = "first.datasource")public DataSource dataSource1(Environment env) {AtomikosDataSourceBean ds = new AtomikosDataSourceBean();Properties prop = build(env, "first.datasource.");ds.setXaDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");ds.setUniqueResourceName("ds1");ds.setXaProperties(prop);return ds;}@Bean(name = "ds2")// application.properteis中对应属性的前缀@ConfigurationProperties(prefix = "second.datasource")public DataSource dataSource2(Environment env) {AtomikosDataSourceBean ds = new AtomikosDataSourceBean();Properties prop = build(env, "second.datasource.");ds.setXaDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");ds.setUniqueResourceName("ds2");ds.setXaProperties(prop);return ds;}private Properties build(Environment env, String prefix) {Properties prop = new Properties();prop.put("URL", env.getProperty(prefix + "jdbc-url"));prop.put("user", env.getProperty(prefix + "username"));prop.put("password", env.getProperty(prefix + "password"));return prop;}
}

4. 测试service

import com.chengqj.twodatasource.dao.entity.TClass;
import com.chengqj.twodatasource.dao.entity.Teacher;
import com.chengqj.twodatasource.service.TClassServiceImpl;
import com.chengqj.twodatasource.service2.TeacherServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import java.util.LinkedHashMap;
import java.util.Map;@Service
public class JtaTestServiceImpl{@Autowiredprivate TeacherServiceImpl teacherService;@Autowiredprivate TClassServiceImpl tclassService;@Transactional( propagation = Propagation.REQUIRED, rollbackFor = { RuntimeException.class })public Map<String, Object> test01() {LinkedHashMap<String,Object> resultMap=new LinkedHashMap<String,Object>();TClass tClass=new TClass();tClass.setId("23");tClass.setName("8888");tclassService.save(tClass);Teacher teacher=new Teacher();teacher.setId("23");teacher.setName("8888");teacherService.save(teacher);System.out.println(1/0);resultMap.put("state","success");resultMap.put("message","分布式事务问题");return resultMap;}
}

分布式事务-Atomikos解决多数据源事务问题相关推荐

  1. 使用JTA解决多数据源事务问题

    分享知识 传递快乐 在一些复杂的应用开发中,一个应用可能会涉及到连接多个数据源,所谓多数据源可以简单理解为至少连接两个及以上的数据库.在动手之前最好先了解对JTA有个了解,可参考:浅谈 JTA 事务 ...

  2. 布式事务实践 解决数据一致性 Spring事务机制

    Spring事务机制 介绍Spring的事务机制.事物抽象.内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource.JPA.JMS.JTA都通过实例进行说明.还有XA以及两阶段提交 ...

  3. php分布式数据一致性,如何解决分布式系统数据事务一致性问题

    在分布式系统中,如何基于业务方面的考量.将RESTful与MQ(消息中间件)结合.解决事务完整性/数据一致性问题的架构设计. 一.面向业务考量的最终一致性方案考虑 这里先举两个例子. 1.支付宝的&q ...

  4. 【java】hibernate利用Atomikos实现多数据源事务管理

    1.引入jar包 <!--多数据源--><dependency><groupId>com.alibaba</groupId><artifactId ...

  5. LCN分布式事务学习0-分布式事务理论基础

    1. 事务概述 1.1 事务的定义 将一个活动涉及到的所有操作纳入到一个不可分割的执行单元,只要其中任一操作执行失败,都将导致整个执行单元回滚. 简单地说,事务提供一种"要么什么都不做,要么 ...

  6. Spring+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务

    一.概念 分布式事务 分布式事务是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.简言之,同时操作多个数据库保持事务的统一,达到跨库事务的效果. JT ...

  7. JTA+Atomikos解决分布式事务问题

    JTA分布式事务:Java Transaction API,允许应用程序执行分布式事务处理. Atomikos:为java平台提供增值服务并且开源的事务管理器. 基于xa协议,xa协议是以两阶段提交协 ...

  8. 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务

    搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...

  9. 基于数据库的事务消息解决分布式事务方案

    转载请注明出处:http://www.cnblogs.com/lizo/p/8516502.html 概述 当单库已不能支撑当前业务的时候,我们往往都考虑进行分库(横向拆分或者纵向拆分).但分库有个无 ...

最新文章

  1. java 线程组作用_Java线程组(ThreadGroup)使用
  2. 在linux怎样删除文件夹里,linux删除文件夹(里头有文件)
  3. centos安装python3.4 pip3
  4. Cisco ASR1002-X告警处理
  5. ElasticSearch D3
  6. creo工程图模板_Creo工程图的优越性总结(仅供参考),来自网友与君共享
  7. Python中的音频和数字信号处理(DSP)
  8. qt可以导入3d吗_3D全息投影技术可以用在教育行业吗?
  9. html2canvas给图片添加水印,canvas 为图片添加水印
  10. Android对接蓝牙打印机
  11. 蚂蚁金服褚霸:敲最牛的代码,骑最野的车
  12. 一文搞懂 Flink如何移动计算
  13. JDBC连接MySQL数据库出现的错误及解决方法整理
  14. 二维图像中Mat::setp、Mat::step1理解
  15. Protobuf 介绍与实战21:如何生成一维数组、二维数组(repeated数组类型介绍)
  16. Mooc视频字幕提取
  17. 学习安卓的简单心得,以及LinearLayout的简单使用
  18. 将字符串中的中文转为拼音(java)
  19. 在FTP服务器上搜索网页
  20. 爬虫在遇到post请求时的一种解决{“code“:40005,“msg“:“req json error“}问题的思路

热门文章

  1. 杭电5597GTW likes function
  2. GitHub Desktop 的使用教程
  3. 321_MediaType Media Type 是什么
  4. 企业如何利用数据库加速AI之旅
  5. 网页视频加速,chrome亲测有效
  6. 学习streamlit-2
  7. Linux产生序列seq命令
  8. JavaScript运算符:viod
  9. UI设计新手常遇到的问题及解决方法,快来看一看!
  10. STM32MP135利用ubuntu或PC端环境搭建,Device is under read out protion!解决方案,用program下载出现乱码解决