分布式事务JTA实现

复现论文《Analysis of circulating current mechanism of Grid-forming offshore wind farm based on DRU-HVDC》 该论文研究了基于二极管整流单元(DRU)和低频交流(LFAC)输电的构网型(GFM)海上风电场并网系统中环流的产生机理。由于 DRU 不可控,系统电压与频率依赖于风力发电机(WT)的网侧变流器,当多台 WT 并联运行时,因输出电压幅值、相位、输出阻抗或频率不匹配,会产生基频环流,导致系统损耗增加与稳定性下降。论文通过理论建模与 MATLAB/Simulink 仿真,分析了四种不平衡工况下的环流机理,并指出幅值不平衡和阻抗不平衡引起无功环流,相位不平衡引起有功环流,频率不平衡则引起环流振荡,为后续环流抑制研究 阅读详情

一个项目操作多个数据源的情况下,如果对事务进行管理:

    分布式事务解决方案:jta + atomikos 

结构目录:

只需要jta 目录即可,其余可忽略


1.  引入以下jar包:(前提:引入ssm需要的jar包)

            <!-- 分布式事务 jta+ atomikos -->
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>

</dependency>

2. 在resource目录中编写jta配置文件:jta.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    ">
  <!-- jta事务管理器 -->
    <bean class="org.springframework.transaction.jta.JtaTransactionManager" id="jtaTransactionManager">
        <property name="transactionManager">
            <bean class="com.atomikos.icatch.jta.UserTransactionManager" destroy-method="close" init-method="init">
                <property name="forceShutdown" value="true">
            </property></bean>
        </property>
        <property name="userTransaction">
            <bean class="com.atomikos.icatch.jta.UserTransactionImp">
                <property name="transactionTimeout" value="300">
            </property></bean>
        </property>
        <!-- 允许设置隔离级别 -->
         <property name="allowCustomIsolationLevels" value="true"/> <!-- 必须设置,否则程序出现异常 JtaTransactionManager does not support custom isolation levels by default -->
    </bean>
    <!-- 配置数据源 1  根据自己的数据库进行修改-->
    <bean class="com.atomikos.jdbc.AtomikosDataSourceBean" destroy-method="close" id="jtaDataSource1" init-method="init">
        <property name="uniqueResourceName" value="ds1"></property>
        <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"></property>
        <property name="xaProperties">
            <props>
                <prop key="url">
                jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=UTF-8
                </prop>
                <prop key="user">root</prop>
                <prop key="password">123456</prop>
                <prop key="pinGlobalTxToPhysicalConnection">true</prop>
            </props>
        </property>
        <property name="minPoolSize" value="10"></property>
        <property name="maxPoolSize" value="100"></property>
        <property name="borrowConnectionTimeout" value="30"></property>
        <property name="testQuery" value="select 1"></property>
        <property name="maintenanceInterval" value="60"></property>
       </bean>
    <!-- 配置数据源  2 根据自己的数据库进行修改-->
    <bean class="com.atomikos.jdbc.AtomikosDataSourceBean" destroy-method="close" id="jtaDataSource2" init-method="init">
        <property name="uniqueResourceName" value="ds2"></property>
        <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"></property>
        <property name="xaProperties">
            <props>
                <prop key="url">jdbc:mysql://localhost:3306/db_test?useUnicode=true&amp;characterEncoding=UTF-8
                </prop>
                <prop key="user">root</prop>
                <prop key="password">123456</prop>
                <prop key="pinGlobalTxToPhysicalConnection">true</prop>
            </props>
        </property>
        <property name="minPoolSize" value="10"></property>
        <property name="maxPoolSize" value="100"></property>
        <property name="borrowConnectionTimeout" value="30"></property>
        <property name="testQuery" value="select 1"></property>
        <property name="maintenanceInterval" value="60"></property>
     </bean>
      <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory1">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="jtaDataSource1"></property>
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
        <!-- 扫描mapper文件 -->
<property name="mapperLocations" value="classpath:cn/com/admin/jta/test01/sql/*.xml"></property>
     </bean>
      <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory2">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="jtaDataSource2"></property>
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
    <!-- 扫描mapper文件 -->
<property name="mapperLocations" value="classpath:cn/com/admin/jta/test02/sql/*.xml"></property>
     </bean>
      <!--指定mybatis的mapper文件的位置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.com.admin.jta.test01"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory1"></property>
    </bean>
        <!--指定mybatis的mapper文件的位置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.com.admin.jta.test02"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory2"></property>
    </bean>
    
    <!--2.配置事务属性 事务管理器为 jta -->
<tx:advice transaction-manager="jtaTransactionManager" id="txAdvice">
<tx:attributes>
<!-- 针对某名称的方法,配置传播行为和隔离级别属性 -->
<tx:method name="insert*" propagation="REQUIRED"  isolation="READ_COMMITTED"/>
<tx:method name="query*" propagation="SUPPORTS"  read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 3.配置事务切点 ,以及把事务切入点及事务属性关联起来: 作用在哪些类的哪些方法上 -->
<aop:config>
<aop:pointcut expression="execution(* cn.com.admin.springlearn.jta.*.*(..))"
id="txPointCut"></aop:pointcut>
<!-- 切点和事务关联 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
</aop:config>
    
    <!-- 注入测试的bean -->
    <bean id="jtaTestService" class="cn.com.admin.springlearn.jta.JTATestServiceImpl"></bean>

</beans>

3. 编写2个数据源对应包下的dao接口

    自行建表测试

    public interface BusinessTest1Dao {
/**
* 添加书本
* @param business
*/
@Insert(value={"insert into business(NAME,price,num) values(#{business.name},#{business.price},#{business.num})"})
void insertBook(@Param("business") Business business);

    }

public interface BusinessTest2Dao {
/**
* 添加书本
* @param business
*/
@Insert(value={"insert into business(NAME,price,num) values(#{business.name},#{business.price},#{business.num})"})
void insertBook(@Param("business") Business business);
}

4. 测试的bean

public class JTATestServiceImpl  {
@Autowired
private BusinessTest1Dao businessTest1Dao;
@Autowired
private BusinessTest2Dao businessTest2Dao;

/**
* 同时向两个数据源插入数据
*/
public void insertBusiness() {
Business business = new Business();
business.setName("张三");
business.setNum(123);
business.setPrice(123);
businessTest1Dao.insertBook(business);
businessTest2Dao.insertBook(business);
int i = 1/0;//回滚
}

5. 测试: 由于出现异常,两个数据源对应的表都插不进去数据,实现了异常同时回滚

public class JTATest {
/**
* 初始化spring容器
*/
private static ApplicationContext ap = new ClassPathXmlApplicationContext("classpath:jta.xml");


public static void main(String[] args) {
JTATestServiceImpl jta = (JTATestServiceImpl) ap.getBean("jtaTestService");
jta.insertBusiness();
//查看数据库添加情况
System.out.println("插入完成");
}
}

面向非平行语料的语音转换技术综述 摘要语音转换是语音及人工智能领域的一项研究课题,其目标是在保持源语音内容不变的情况下改变语音的音色,使其听上去像是由另一个目标说话人说出的,同时还需保证语音的质量和自然度。面向非平行语料的语音转换技术是当下的热门研究内容,其使用非平行的多说话人语音数据集进行模型训练,能完成多对多以及任意对任意的语音转换。对近年来面向非平行语料的语音转换进行了全面的总结和分析。首先概述了早期面向平行语料的语音转换及其缺陷,然后对当下面向非平行语料的语音转换的各类实现方法进行介绍和对比分析,最后对语音转换技术进行了总结和展望。 阅读详情

相关推荐

用Codex自动化挖掘电梯行业外贸客户:从关键词到22维深度分析

在B2B外贸客户开发中,精准定位垂直行业潜在客户是核心挑战。传统手动搜索效率低下,而数据驱动的工作流正成为解决方案。其原理在于将模糊的业务需求转化为机器可识别的结构化查询,通过组合行业核心关键词(如“Elevator Manufacturer”、“Elevator Maintenance”)与商业角色描述,系统性地从海量数据中筛选目标。这种自动化抓取技术的价值在于,它不仅生成客户名单,更通过多维数据分析(如公司规模、业务标签、数字足迹)构建初步的客户画像,为后续的优先级排序和个性化触达提供情报基础。在工业制

weixin_34054866的博客 455

spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理

转载自:http://blog.youkuaiyun.com/liaohaojian/article/details/68488150 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID)。 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做; 一致性(Consisten...

weixin_34209406的博客 194

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

Spring+Atomikos实现JTA事务

一、环境 AtomikosTransactionsEssentials-3.7.2 下载地址:http://www.atomikos.com/Main/InstallingTransactionsEssentials jar包引入 [quote] transactions-jdbc.jar(必须包) transactions-jta.jar transactions.jar ...

aguu125的博客 695

AutoCAD中圆弧折线化方法与实现

在AutoCAD中,圆弧折线化是将圆弧曲线转换为由一系列线段组成的折线曲线的过程。本文将介绍如何使用LISP编写代码来实现圆弧折线化,并提供相应的源代码。上述示例代码将生成一个以坐标原点为圆心、起点为(5.0, 0.0, 0.0)、终点为(0.0, 5.0, 0.0)、半径为5.0、角度为90度的圆弧的折线表示。通过使用上述的LISP代码,你可以在AutoCAD中实现将圆弧转换为折线的功能。你可以根据需要修改代码中的参数来适应不同的圆弧转换需求。函数,并传入圆弧的起点、终点、圆心、半径和角度参数。

VcuOcaml的博客 1417

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

目录 1 创建一个AUTOSAR系统描述 2 物理层命名以及创建ECU 3 新建一个Frame 4 新建一个PDU 5 新建一个signal 6 结尾 AUTOSAR System Description Network Explorer是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR系统描述文件和ECU摘录的通信内容,它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。AUTOSAR系统描述(ARXML)文件是基于XML的文件格式,描述网络通信的元素...

「汽车电子助手」的博客 1万+

MiniDao实现分库事务

机缘巧合接触到国产轻量级持久层开源框架MiniDao,了解该框架也有一段时间了,但是一直都没有深入的研究底层代码,最近花了一些时间研究了一下实现原理。MiniDao官方提供的版本不支持分布式事务,我在官方的MiniDao-pe-1.6版本上实现了该功能,满足了现有项目的需求。以下具体分析该功能的实现:步骤:一、现有的问题二、深入解析源码,实现分库事务功能三、单元测试一、分析现有的问题在MiniDa...

liuyanmin专栏 4588

Qlib:微软开源的AI量化投资平台 极简入门快速上手教程:使用 Qlib 进行中芯国际股价回测和预测

Qlib是由微软开源的面向AI量化投资的工具包。它提供了构建量化投资模型所需的基础设施,旨在帮助研究者和从业人员更高效地进行量化研究和策略开发。

AI天才研究院 5413

Spring +SpringMvc+Mybatis+Mysql+SqlServer+Atomikos+transactions.properties

系统场景是这样的,因业务需要配置多数据源进行大数据批量插入到数据库中,就是这配置多数据源的时候要考虑到事物的处理 事物的处理有很多种方式在网上查询了很多资料遇过很多的坑结合自己的使用情况整理一下,大概花了一周的时间,真的是悲催的要命,说 到这有点脑壳疼。如果想要去了解其中的原理请在网上收一下吧我就不在copy了。。。。 多数据源Mapper文件映射的配置方式如果要配置事物管理需要依赖sprin...

liuzhenteng521的博客 892

如何在MacBook上安装部署原生openclaw

本文介绍了在MacBook上安装OpenClaw的详细步骤:首先通过curl或国内镜像源安装nvm和Node.js(版本≥22),然后使用nvm安装Node.js 24并验证安装。接着通过脚本快速安装OpenClaw,完成安装后选择Qwen作为AI模型并进行OAuth认证。配置过程中可跳过联网搜索和Agent技能设置,最后选择Web界面作为呈现方式。安装完成后,系统会启动openclaw-gateway进程并打开Web界面,用户可通过简单的"hello"指令开始与AI对话。目前基础功能已

木简熙的博客 810

171、运动控制中的标定:摩擦力与死区补偿标定

摘要(149字) 运动控制系统中的摩擦力与死区补偿是提升精度的关键。摩擦力分为静摩擦、库仑摩擦和粘滞摩擦,其中Stribeck效应是低速抖动的主因;死区则表现为控制信号的无效区间。有效标定方法包括恒速测试(摩擦力)和斜坡响应法(死区)。补偿策略需采用分段前馈和动态调整,避免过度补偿导致振荡。实践中要注意机械状态检查、补偿量限幅,并定期重新标定。硬件升级配合算法补偿才能实现最优控制,标定工作应优先于PID参数调整。

m0_50546716的博客 230

odbc驱动程序管理器未发现数据源名称用_用 Spring 框架指定自定义隔离级别

在 Java EE 应用程序的分布式事务中使用自定义隔离级别许多 Java Enterprise Edition(EE)应用程序在执行用户请求时都会访问多处资源。例如,应用程序也许需要将一条消息放到一个面向消息的中间件队列中,并在相同的事务上下文中更新数据库行。可以通过使用应用服务器提供的 Java Transaction API(JTA)事务管理器和兼容 XA 的驱动程序连接到数据资源来实现这一...

weixin_39849930的博客 281

若依框架二次开发——若依 Vue3 版本前端样式优化指南

若依框架二次开发——若依 Vue3 版本前端样式优化指南

bjzhang75的博客 1692

【SpringBoot】Spring JDBC JTA实现分布式事务

在上一节代码的的Service层做一下测试,人为制造一个被除数为0的异常。然后对该服务对应的Controller方法发送请求。(postman)secondaryJdbcTemplate的数据插入数据成功,primaryJdbcTemplate的数据插入数据失败。数据库事务不能跨连接, 当然也就不能跨数据源,更不能跨库。一旦出现跨连接的情况,也就成了分布式事务,事务就不能单纯依赖于数据库去处理。我们这一节的实现方式,是通过JTA来实现。

Robin的博客 740

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JTA+Atomikos实现分布式事务

本文介绍了使用JTA+Atomikos实现Spring Boot多数据源分布式事务的配置方法。主要内容包括:1)添加Spring Boot JTA Atomikos依赖;2)配置基于Atomikos的XA数据源,包括主数据源和账单数据源;3)设置MyBatis SqlSessionFactory和分页插件;4)使用JtaTransactionManager替代原生事务管理器;5)通过自定义注解和切面实现数据源选择;6)在业务层使用@Transactional注解实现跨数据源事务管理。配置移除了动态数据源方案

hudeyong926的专栏 395

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用Atomikos实现JTA分布式事务

使用Atomikos实现JTA分布式事务 在这篇文章中: 1.1 JTA事务模型 2 JTA规范接口 3 Atomikos分布式事务 本文全面的介绍了JTA分布式事务模型和接口规范,以及开源的分布式事务解决方案Atomikos。笔者认同"talk is cheap,show me the code",因此在文章最后,给出一个完整的Atomikos与spring、mybatis整合的完整...

好风凭借力 75

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

分布式事务之JTA原理与实现(三)

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 什么是JTA Java 事务编程接口(JTA:Java Transaction API)和 Java 事务服务 (JTS;Java Transaction Service) 为 J2EE 平台提供了分布式事务服务。分布式事务(Distributed Transaction)包括事务管理器(Transaction Manager)和一个或多个支持 XA 协议的资源管理器 ( Resource Manager )。 资源管理器( Reso

程序员蒋老湿的博客 523

java分布式事务(JTA)实现 jotm和atomikos

首先解释一个概念:本地事务和分布式事务。 本地事务:只处理单一数据源,比如单个数据库下,事务进行控制。 分布式事务:处理多种异构的数据源, 比如某个业务操作中同时包含JDBC和JMS或者某个操作需要访问多个不同的数据库,在不同数据库之间进行事务控制。        在Java中,分布式事务主要的规范是JTA/XA。其中:JTA是Java的事务管理器规范, XA是工业标准的X/Open C

赶路人儿 6243

Spring实现分布式事务JTA(使用atomiko实现)

Spring实现分布式事务JTA(使用atomiko实现)        分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理。如不同银行账户之间的转账。        对于在项目中接触到JTA,大部分

上帝的私生子的博客 2738

Spring MyBatis Atomikos 实现JTA分布式事务

Spring+MyBatis+Atomikos实现JTA分布式事务 项目中需要同时操作两个数据库,对两个数据库中的表同时做变更时就需要控制事务,要么全部成功,要么全部失败。 Atomikos是一个开源的事务管理器,研究了一下,可以满足需求。 理解分布式事务JTA原理参见:http://www.ibm.com/developerworks/......

2万+

Spring分布式事务- 三种实现方式(Spring+JTA)

分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理。如不同银行账户之间的转账。对于在项目中接触到JTA,大部分的原因是因为在项目中需要操作多个数据库,同时,可以保证操作的原子性,保证对多个数据库的操作一致性。 项目结构图

Roden的专栏 3万+

java 分布式事务 xa_Spring的分布式事务实现(JTA+XA/2PC)

JTA是Java Transaction API简称 ,即Java事务管理器,主要管理本地事务。本地事务是只同一个数据库源中,多次数据库连接之间的事务,使得这多个数据表操作遵循ACID。如果想让JTA管理多台数据库操作的分布式事务,需要XA支持,Open Group设计的X / Open分布式事务处理定义了一种标准通信架构。允许多个应用程序共享多个资源管理器提供的资源,并允许其工作协调到全局事务中...

weixin_39955925的博客 225

springBoot+jpa+jta+atomikos十分钟实现分布式事务,模拟多数据源

基于jta+atomikos解决分布式事务 模拟多数据源 jta: Java Transactio API,即是java中对事务处理的api,api即是接口的意思. atomikos:Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器,基于2PC协议.不明白XA 2PC 3PC TCC的同学可以花几分钟的时间去看一下. 1....

qq_33449307的博客 3363

Spring+JTA实现分布式事务

写的比较清楚,学习一下。 分布式事务操作之Spring+JTA http://www.cnblogs.com/wangyong/p/4174326.html

lszzzz的专栏 463

Spring JTA接口+Atomikos实现申明式分布式事务控制

1. 在pom文件引入atomikos依赖 用maven要简单一点,只需要加入两个依赖: com.atomikos transactions-jdbc 3.7.0 javax.transaction jta 1.1 2. 将需要分布式事务的数据源变成AtomikosDataSourceBean

Jerry的一亩三分地 1221

Spring JTA分布式事务实现

1.概述 Java Transaction API,通常称为JTA,是用于管理 Java中的事务的API 。它允许我们以资源无关的方式启动,提交和回滚事务。 根据用于管理事务的底层实现,Spring中的事务策略可以分为两个主要部分: 单连接器策略(相当于本地事务管理器) - 底层技术使用单连接器。例如,JDBC使用连接级事务、Hibernate以及JDO使用会话级事务。可以应用使用AOP和拦截器...

王浩的技术博客 1万+
上一篇: tomcat配置https
下一篇: eclipse 安装 spring boot suite 插件遇到的问题
java_resolver
博客等级 码龄10年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值