首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
java面试题基础
冒泡排序算法
插入排序算法
归并排序算法
二叉树排序算法
基数排序
选择排序
堆排序
快排
TCP-三次握手
HTTP协议
WebSocket
Mysql架构
Innodb与Myisam数据库引擎
事务隔离级别
面向对象(OOP)
异常
泛型
Object
StringBuilder
代理
注解
java面试题基础二
HashMap
ConcurrentHashMap
BlockingQueue
线程
Volatile
AtomicInteger
Synchronized
Java虚拟机架构
类加载器
内存模型
垃圾回收
Mybatis面试题
IOC
高并发系统设计
分布式缓存
分布式锁
分布式事务
消息队列
当前位置:
首页>>
技术小册>>
Java面试指南
小册名称:Java面试指南
### 分布式事务介绍 Java分布式事务是指跨越多个独立的系统或进程的事务,它们共同参与一个全局的事务。在分布式系统中,每个系统都可能有自己的数据库和事务管理器,因此需要一种机制来确保所有系统在执行分布式事务时保持一致性。 Java分布式事务可以使用两种基本的模式:基于两阶段提交(Two-Phase Commit,2PC)协议和基于补偿事务(Compensating Transaction)机制。2PC是最常用的分布式事务协议,它通过协调器协调参与者的操作来实现全局事务的提交或回滚。 下面是一个基于2PC协议的Java分布式事务示例代码: **添加依赖** ```java <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> <version>2.6.2</version> </dependency> ``` **配置数据源和事务管理器** ```java @Configuration public class DataSourceConfig { @Bean(name = "dataSource1") @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSource dataSource1() { return new AtomikosDataSourceBean(); } @Bean(name = "dataSource2") @ConfigurationProperties(prefix = "spring.datasource.ds2") public DataSource dataSource2() { return new AtomikosDataSourceBean(); } @Bean(name = "userTransaction") public UserTransaction userTransaction() throws Throwable { UserTransactionImp userTransactionImp = new UserTransactionImp(); userTransactionImp.setTransactionTimeout(10000); return userTransactionImp; } @Bean(name = "atomikosTransactionManager", initMethod = "init", destroyMethod = "close") public TransactionManager atomikosTransactionManager() throws Throwable { UserTransactionManager userTransactionManager = new UserTransactionManager(); userTransactionManager.setForceShutdown(false); return userTransactionManager; } @Bean(name = "transactionManager") public PlatformTransactionManager transactionManager() throws Throwable { return new JtaTransactionManager(userTransaction(), atomikosTransactionManager()); } } ``` 在这个配置类中,我们使用了Atomikos实现了分布式事务管理器。我们配置了两个数据源dataSource1和dataSource2,它们使用不同的数据库。我们还配置了userTransaction和atomikosTransactionManager两个Bean,用于管理分布式事务。 **编写业务逻辑代码** ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override @Transactional(rollbackFor = Exception.class) public void transfer(String fromUser, String toUser, int amount) throws Exception { User user1 = userRepository.findByUsername(fromUser); User user2 = userRepository.findByUsername(toUser); if (user1.getBalance() < amount) { throw new RuntimeException("Insufficient balance."); } user1.setBalance(user1.getBalance() - amount); user2.setBalance(user2.getBalance() + amount); userRepository.save(user1); userRepository.save(user2); } } ```
上一篇:
分布式锁
下一篇:
消息队列
该分类下的相关小册推荐:
Java性能调优实战
JAVA 函数式编程入门与实践
Java语言基础11-Java中的泛型
Java语言基础6-面向对象高级
Java语言基础13-类的加载和反射
手把手带你学习SpringBoot-零基础到实战
Mybatis合辑3-Mybatis动态SQL
Java语言基础8-Java多线程
Mybatis合辑1-Mybatis基础入门
Java语言基础15-单元测试和日志技术
SpringBoot零基础到实战
Java语言基础5-面向对象初级