千家信息网

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手机软件开发公司
    0