这篇文章主要介绍“SpringBoot-jta-atomikos多数据源事务管理如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot-jta-atomikos多数据源事务管理如
这篇文章主要介绍“SpringBoot-jta-atomikos多数据源事务管理如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot-jta-atomikos多数据源事务管理如何实现”文章能帮助大家解决问题。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency>
#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
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;@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); }}
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;@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; }}
//使用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多数据源事务管理如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。
--结束END--
本文标题: springboot-jta-atomikos多数据源事务管理如何实现
本文链接: https://www.lsjlt.com/news/324667.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0