Springboot入门之分布式事务管理
来源:互联网 发布:淘宝把买家加入黑名单 编辑:程序博客网 时间:2024/06/06 11:41
springboot默认集成事务,只主要在方法上加上@Transactional即可。
分布式事务一种情况是针对多数据源,解决方案这里使用springboot+jta+atomikos来解决。
一、pom文件
<groupId>cn.iponkan</groupId> <artifactId>springboot-jsp</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!-- SpringBoot 核心组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency> </dependencies>
二、application.properties
# Mysql 1mysql.datasource.test.url = jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8mysql.datasource.test.username = rootmysql.datasource.test.password =mysql.datasource.test.minPoolSize = 3mysql.datasource.test.maxPoolSize = 25mysql.datasource.test.maxLifetime = 20000mysql.datasource.test.borrowConnectionTimeout = 30mysql.datasource.test.loginTimeout = 30mysql.datasource.test.maintenanceInterval = 60mysql.datasource.test.maxIdleTime = 60mysql.datasource.test.testQuery = select 1# Mysql 2mysql.datasource.test2.url =jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8mysql.datasource.test2.username =rootmysql.datasource.test2.password =mysql.datasource.test2.minPoolSize = 3mysql.datasource.test2.maxPoolSize = 25mysql.datasource.test2.maxLifetime = 20000mysql.datasource.test2.borrowConnectionTimeout = 30mysql.datasource.test2.loginTimeout = 30mysql.datasource.test2.maintenanceInterval = 60mysql.datasource.test2.maxIdleTime = 60mysql.datasource.test2.testQuery = select 1
三、读取配置文件,使用类(DBConfig2类似)
@ConfigurationProperties(prefix = "mysql.datasource.test")public class DBConfig1 { private String url; private String username; private String password; private int minPoolSize; private int maxPoolSize; private int maxLifetime; private int borrowConnectionTimeout; private int loginTimeout; private int maintenanceInterval; private int maxIdleTime; private String testQuery; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getMinPoolSize() { return minPoolSize; } public void setMinPoolSize(int minPoolSize) { this.minPoolSize = minPoolSize; } public int getMaxPoolSize() { return maxPoolSize; } public void setMaxPoolSize(int maxPoolSize) { this.maxPoolSize = maxPoolSize; } public int getMaxLifetime() { return maxLifetime; } public void setMaxLifetime(int maxLifetime) { this.maxLifetime = maxLifetime; } public int getBorrowConnectionTimeout() { return borrowConnectionTimeout; } public void setBorrowConnectionTimeout(int borrowConnectionTimeout) { this.borrowConnectionTimeout = borrowConnectionTimeout; } public int getLoginTimeout() { return loginTimeout; } public void setLoginTimeout(int loginTimeout) { this.loginTimeout = loginTimeout; } public int getMaintenanceInterval() { return maintenanceInterval; } public void setMaintenanceInterval(int maintenanceInterval) { this.maintenanceInterval = maintenanceInterval; } public int getMaxIdleTime() { return maxIdleTime; } public void setMaxIdleTime(int maxIdleTime) { this.maxIdleTime = maxIdleTime; } public String getTestQuery() { return testQuery; } public void setTestQuery(String testQuery) { this.testQuery = testQuery; }}
四、创建多数据源(同理创建2)
@Configuration@MapperScan(basePackages = "cn.iponkan.test01", sqlSessionTemplateRef = "testSqlSessionTemplate")public class TestMyBatisConfig1 { // 配置数据源 @Primary @Bean(name = "testDataSource") public DataSource testDataSource(DBConfig1 testConfig) throws SQLException { MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource(); mysqlXaDataSource.setUrl(testConfig.getUrl()); mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true); mysqlXaDataSource.setPassword(testConfig.getPassword()); mysqlXaDataSource.setUser(testConfig.getUsername()); mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true); AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean(); xaDataSource.setXaDataSource(mysqlXaDataSource); xaDataSource.setUniqueResourceName("testDataSource"); xaDataSource.setMinPoolSize(testConfig.getMinPoolSize()); xaDataSource.setMaxPoolSize(testConfig.getMaxPoolSize()); xaDataSource.setMaxLifetime(testConfig.getMaxLifetime()); xaDataSource.setBorrowConnectionTimeout(testConfig.getBorrowConnectionTimeout()); xaDataSource.setLoginTimeout(testConfig.getLoginTimeout()); xaDataSource.setMaintenanceInterval(testConfig.getMaintenanceInterval()); xaDataSource.setMaxIdleTime(testConfig.getMaxIdleTime()); xaDataSource.setTestQuery(testConfig.getTestQuery()); return xaDataSource; } @Bean(name = "testSqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "testSqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); }}
五、Controller类和启动类
@RestControllerpublic class Indexcontroller { @Autowired private User1Mapper user1Mapper; @Autowired private User2Mapper user2Mapper; @RequestMapping("/add") @Transactional public String add() { user2Mapper.addUser("Clare", 22); int i = 1/0; user1Mapper.addUser("Tung", 22); return "成功!"; }}
@ComponentScan(basePackages = { "cn.iponkan.controller","cn.iponkan.datasource","cn.iponkan.test01","cn.iponkan.test02","cn.iponkan.config"})@EnableAutoConfiguration@EnableConfigurationProperties(value = { DBConfig1.class, DBConfig2.class })public class SpringBootApplication { public static void main(String[] args){ SpringApplication.run(SpringBootApplication.class,args); }}
源代码:https://github.com/tangqiangDong/Springboot点击打开链接
阅读全文
0 0
- Springboot入门之分布式事务管理
- springboot分布式事务管理(atomikos)
- 事务管理之XA分布式事务管理
- 事务管理之分布式事务
- springboot事务管理
- SpringBoot事务管理
- springboot事务管理
- SpringBoot 事务管理
- springBoot事务管理
- springboot事务管理
- SpringBoot事务管理
- SpringBoot事务管理
- 【SpringBoot】SpringBoot之入门配置文件
- 第六节:SpringBoot之事务管理@Transactional
- SpringBoot入门之HelloWorld
- SpringBoot入门之HelloWorld
- SpringBoot入门之数据库
- springboot入门之mybatis
- pat甲级1064-Complete Binary Search Tree
- UI 一一 UIWebView的应用小案例
- 第一章:STM32串口ISP下载
- Visual studio + IIS环境下跨域项目,移动端可触发断点调试的WEB服务器布署
- 第六章 ALDS1_5_A:Exhaustive Search 穷举搜索
- Springboot入门之分布式事务管理
- 474. Ones and Zeroes
- pip安装套件出错
- JDK8探险——CompletableFuture
- 数据结构笔记(3)树——AVL树以及恼人的旋转
- 哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)I 旅行【枚举+spfa】
- SGMII 和 Serdes 的详细说明
- Java之android添加Button打印TextView
- 适配器模式