泰和县建设局网站,怎样做能直接上传微信的视频网站,网页制作与网站建设技术大全 pdf,网站开发投稿可行吗一、JTA组件简介1、JTA基本概念JTA即Java-Transaction-API#xff0c;JTA允许应用程序执行分布式事务处理#xff0c;即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。XA协议是数据库层面的一套分布式事务管理的规范,JTA…一、JTA组件简介1、JTA基本概念JTA即Java-Transaction-APIJTA允许应用程序执行分布式事务处理即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。XA协议是数据库层面的一套分布式事务管理的规范,JTA是XA协议在Java中的实现,多个数据库或是消息厂商实现JTA接口,开发人员只需要调用SpringJTA接口即可实现JTA事务管理功能。JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中2、分布式事务分布式事务(DistributedTransaction)包括事务管理器(TransactionManager)和一个或多个支持 XA 协议的资源管理器 ( Resource Manager )。资源管理器是任意类型的持久化数据存储容器例如在开发中常用的关系型数据库MySQLOracle等消息中间件RocketMQ、RabbitMQ等。事务管理器提供事务声明事务资源管理同步事务上下文传播等功能并且负责着所有事务参与单元者的相互通讯的责任。JTA规范定义了事务管理器与其他事务参与者交互的接口其他的事务参与者与事务管理器进行交互。二、SpringBoot整合JTA项目整体结构图1、核心依赖org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-jta-atomikos2、环境配置这里jtaManager的配置在日志输出中非常关键。spring:jta:transaction-manager-id: jtaManager# 数据源配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedata01:driverClassName: com.mysql.jdbc.DriverdbUrl: jdbc:mysql://localhost:3306/data-oneusername: rootpassword: 000000data02:driverClassName: com.mysql.jdbc.DriverdbUrl: jdbc:mysql://localhost:3306/data-twousername: rootpassword: 0000003、核心容器这里两个数据库连接的配置手法都是一样的可以在源码中自行下载阅读。基本思路都是把数据源交给JTA组件来统一管理方便事务的通信。数据源参数ComponentConfigurationProperties(prefix  spring.datasource.data01)public class DruidOneParam {private String dbUrl;private String username;private String password;private String driverClassName;}JTA组件配置package com.jta.source.conifg;ConfigurationMapperScan(basePackages  {com.jta.source.mapper.one},sqlSessionTemplateRef  data01SqlSessionTemplate)public class DruidOneConfig {private static final Logger LOGGER  LoggerFactory.getLogger(DruidOneConfig.class) ;Resourceprivate DruidOneParam druidOneParam ;PrimaryBean(dataSourceOne)public DataSource dataSourceOne () {// 设置数据库连接MysqlXADataSource mysqlXADataSource  new MysqlXADataSource();mysqlXADataSource.setUrl(druidOneParam.getDbUrl());mysqlXADataSource.setUser(druidOneParam.getUsername());mysqlXADataSource.setPassword(druidOneParam.getPassword());mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);// 事务管理器AtomikosDataSourceBean atomikosDataSourceBean  new AtomikosDataSourceBean();atomikosDataSourceBean.setXaDataSource(mysqlXADataSource);atomikosDataSourceBean.setUniqueResourceName(dataSourceOne);return atomikosDataSourceBean;}PrimaryBean(name  sqlSessionFactoryOne)public SqlSessionFactory sqlSessionFactoryOne(Qualifier(dataSourceOne) DataSource dataSourceOne) throws Exception{// 配置Session工厂SqlSessionFactoryBean sessionFactory  new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSourceOne);ResourcePatternResolver resolver  new PathMatchingResourcePatternResolver();sessionFactory.setMapperLocations(resolver.getResources(classpath*:/dataOneMapper/*.xml));return sessionFactory.getObject();}PrimaryBean(name  data01SqlSessionTemplate)public SqlSessionTemplate sqlSessionTemplate(Qualifier(sqlSessionFactoryOne) SqlSessionFactory sqlSessionFactory) {// 配置Session模板return new SqlSessionTemplate(sqlSessionFactory);}}4、测试对比这里通过两个方法测试结果做对比在两个数据源之间进行数据操作时只需要在接口方法加上Transactional注解即可这样保证数据在两个数据源间也可以保证一致性。Servicepublic class TransferServiceImpl implements TransferService {Resourceprivate UserAccount01Mapper userAccount01Mapper ;Resourceprivate UserAccount02Mapper userAccount02Mapper ;Overridepublic void transfer01() {userAccount01Mapper.transfer(jack,100);System.out.println(i1/0);userAccount02Mapper.transfer(tom,100);}TransactionalOverridepublic void transfer02() {userAccount01Mapper.transfer(jack,200);System.out.println(i1/0);userAccount02Mapper.transfer(tom,200);}}三、JTA组件小结在上面JTA实现多数据源的事务管理使用方式还是相对简单通过两阶段的提交可以同时管理多个数据源的事务。但是暴露出的问题也非常明显就是比较严重的性能问题,由于同时操作多个数据源,如果其中一个数据源获取数据的时间过长,会导致整个请求都非常的长,事务时间太长,锁数据的时间就会太长自然就会导致低性能和低吞吐量。因此在实际开发过程中对性能要求比较高的系统很少使用JTA组件做事务管理。作为一个轻量级的分布式事务解决方案在小的系统中还是值得推荐尝试的。最后作为Java下的API原理和用法还是值得学习一下开阔眼界和思路。四、源代码地址到此这篇关于SpringBoot2整合JTA组件实现多数据源事务管理的文章就介绍到这了,更多相关SpringBoot2 JTA多数据源事务管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家