使用 Seata 代理数据源 DataSource
使用 Seata 代理数据源 DataSource【io.seata.rm.datasource】
1. 代码【我们的数据源最终是给 sqlSessionFactory 使用的】
package com.llq.springcloud.config;
@Configuration
public class DataSourceProxyConfig {
@Value("${mybatis.mapperLocations}") // 引用 application.yml 中的配置
private String mapperLocations;
// 配置 druidDataSource
@Bean // 注入容器中
@ConfigurationProperties(prefix = "spring.datasource") // 引用 application.yml 中的配置
public DataSource druidDataSource(){
return new DruidDataSource();
}
// 配置 DataSourceProxy【用 Seata 代理数据源】===> 我们的数据源最终是给 sqlSessionFactory 使用的
@Bean
public DataSourceProxy dataSourceProxy(DataSource dataSource){
return new DataSourceProxy(dataSource);
}
// 配置 SqlSessionFactory - 常规写法
@Bean
public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy)
throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean =
new SqlSessionFactoryBean(); // 创建好 sqlSessionFactoryBean,在下面设置它
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
sqlSessionFactoryBean.setMapperLocations
(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
sqlSessionFactoryBean.setTransactionFactory
(new SpringManagedTransactionFactory()); // 设置事务管理器
return sqlSessionFactoryBean.getObject();
}
}
2. 逻辑证明【SqlSessionFacotory:连接池,SqlSession:连接】
它们是否是同一个对象【利用 HashCode 来验证】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix