springboot-jta-atomikos多数据源事务管理如何实现
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"springboot-jta-atomikos多数据源事务管理如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"springboot-j
千家信息网最后更新 2025年11月07日springboot-jta-atomikos多数据源事务管理如何实现
这篇文章主要介绍"springboot-jta-atomikos多数据源事务管理如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"springboot-jta-atomikos多数据源事务管理如何实现"文章能帮助大家解决问题。
项目目录结构

实现
1.添加依赖 pom.xml
org.springframework.boot spring-boot-starter-jta-atomikos
2.配置数据库连接信息 application.properties
#atomikos测试spring.datasource.test1.url=jdbc:mysql://127.0.0.1:3306/test1?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghaispring.datasource.test1.user=rootspring.datasource.test1.password=arsenalspring.datasource.test2.url=jdbc:mysql://127.0.0.1:3306/test2?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghaispring.datasource.test2.user=rootspring.datasource.test2.password=arsenal
3.创建多数据源 DBAtomikosConfig.java
package com.llq.atomikos.config;import com.atomikos.icatch.jta.UserTransactionImp;import com.atomikos.icatch.jta.UserTransactionManager;import org.springframework.beans.factory.annotation.Qualifier;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.context.annotation.Primary;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.transaction.jta.JtaTransactionManager;import javax.sql.DataSource;import javax.transaction.UserTransaction;import java.util.Properties;/** * @author lvlianqi * @description * @date 2022/3/7 */@Configurationpublic class DBAtomikosConfig { //--------------------数据源1-------------------- @ConfigurationProperties(prefix = "spring.datasource.test1") @Bean public Properties testOneProperties() { return new Properties(); } @Bean(name = "testOneDataSource") @Primary public DataSource testOneDataSource() { AtomikosDataSourceBean ds = new AtomikosDataSourceBean(); Properties prop = testOneProperties(); ds.setXaDataSourceClassName("com.mysql.cj.jdbc.MysqlXADataSource"); ds.setUniqueResourceName("testOne"); ds.setXaProperties(prop); return ds; } @Bean @Primary public JdbcTemplate testOneJdbcTemplate(@Qualifier("testOneDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } //--------------------数据源2-------------------- @ConfigurationProperties(prefix = "spring.datasource.test2") @Bean public Properties testTwoProperties() { return new Properties(); } @Bean(name = "testTwoDataSource") public DataSource testTwoDataSource() { AtomikosDataSourceBean ds = new AtomikosDataSourceBean(); Properties prop = testTwoProperties(); ds.setXaDataSourceClassName("com.mysql.cj.jdbc.MysqlXADataSource"); ds.setUniqueResourceName("testTwo"); ds.setXaProperties(prop); return ds; } @Bean public JdbcTemplate testTwoJdbcTemplate(@Qualifier("testTwoDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } //--------------------配置spring的JtaTransactionManager,底层委派给atomikos进行处理-------------------- @Bean public JtaTransactionManager jtaTransactionManager () { UserTransactionManager userTransactionManager = new UserTransactionManager(); UserTransaction userTransaction = new UserTransactionImp(); return new JtaTransactionManager(userTransaction, userTransactionManager); }}4.测试事务类 TestAtomikos.java
package com.llq.atomikos.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;/** * @author lvlianqi * @description * @date 2022/3/7 */@Servicepublic class TestAtomikos implements ITest{ @Qualifier("testOneJdbcTemplate") @Autowired private JdbcTemplate testOneJdbcTemplate; @Qualifier("testTwoJdbcTemplate") @Autowired private JdbcTemplate testTwoJdbcTemplate; /** * 测试正常情况 */ @Transactional(rollbackFor = Exception.class, value = "jtaTransactionManager") public void test() { testOneJdbcTemplate.execute("insert into user (name, age) values ('张三', 18);"); testTwoJdbcTemplate.execute("insert into user (name, age) values ('李四', 20);"); } /** * 测试异常情况 */ @Transactional(rollbackFor = Exception.class, value = "jtaTransactionManager") public void testByException() { testOneJdbcTemplate.execute("insert into user (name, age) values ('张三', 18);"); testTwoJdbcTemplate.execute("insert into user (name, age) values ('李四', 20);"); int i = 1/0; }}5.测试 SpringbootAtomikosApplicationTests.java
//使用atomikos private static Class CLS = TestAtomikos.class; @Autowired ApplicationContext applicationContext; @Test public void testByException() { ITest test = (ITest) applicationContext.getBean(CLS); test.testByException(); }测试结果
执行错误
数据库test1 user表没有记录

数据库test2 user表没有记记录
关于"springboot-jta-atomikos多数据源事务管理如何实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
数据
数据源
测试
事务
事务管理
管理
数据库
知识
情况
行业
张三
李四
配置
不同
实用
信息
内容
实用性
实际
底层
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2020年网络安全周答案
服务器只有一个ip地址
南京蔬菜批发软件开发
ecshop数据库
企业存储服务器配置
三峡银行软件开发岗笔试
兴盛科技互联网金融
数据库不用语句直接修改功能
网络安全三大龙头
浏阳市学软件开发
创造与魔法服务器帐号为什么消失
网页存储题库数据库
网络服务器能为网络提供什么
网络安全相关法律PPT
深圳市凤栖互联网科技有限公司
滁州通信软件开发外包公司
亼亼软件开发
it软件开发环境是指什么
淘宝用的什么服务器
被入侵后后台服务器冻结可以吗
徐汇区一站式网络技术怎么样
广州java软件开发培训
怎样建立学生健康管理数据库
我国网络安全主要威胁来源
企业信息化管理软件开发困境
二零一八网络安全周主题
学生网络安全教育与我
计算机如何转换成数据库
虎丘区营销网络技术哪个好
app手机软件开发公司