当前位置: 首页 > news >正文

贾汪城乡建设局网站数据分析培训课程

贾汪城乡建设局网站,数据分析培训课程,网站建设关键词优化,做网站接广告赚钱么1. 多数据源配置原理 在 Spring Boot 项目中使用 MyBatis-Plus 支持多数据源,通常需要基于 AbstractRoutingDataSource 实现动态数据源切换。其核心原理包括: 定义多个数据源:在 application.yml 或 application.properties 配置不同的数据…

1. 多数据源配置原理

在 Spring Boot 项目中使用 MyBatis-Plus 支持多数据源,通常需要基于 AbstractRoutingDataSource 实现动态数据源切换。其核心原理包括:

  1. 定义多个数据源:在 application.ymlapplication.properties 配置不同的数据源信息。
  2. 创建数据源 Bean:基于 DataSourceBuilder 初始化不同的数据源实例。
  3. 使用 AbstractRoutingDataSource:继承 AbstractRoutingDataSource,实现 determineCurrentLookupKey 方法,根据上下文切换数据源。
  4. 配置 MyBatis-Plus 关联多数据源:设置 SqlSessionFactoryDataSourceTransactionManager 关联不同的数据源。

示例配置:

spring:datasource:primary:url: jdbc:mysql://localhost:3306/db1username: rootpassword: rootsecondary:url: jdbc:mysql://localhost:3306/db2username: rootpassword: root

2. 动态切换数据源的实现

动态切换数据源的关键在于 AbstractRoutingDataSource 的使用和 AOP 方式实现方法级别的切换。

2.1 自定义数据源上下文管理

public class DataSourceContextHolder {private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();public static void setDataSource(String dataSourceKey) {CONTEXT_HOLDER.set(dataSourceKey);}public static String getDataSource() {return CONTEXT_HOLDER.get();}public static void clear() {CONTEXT_HOLDER.remove();}
}

2.2 继承 AbstractRoutingDataSource 实现动态路由

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();}
}

2.3 AOP 方式切换数据源

@Aspect
@Component
public class DataSourceAspect {@Around("@annotation(targetDataSource)")public Object around(ProceedingJoinPoint point, TargetDataSource targetDataSource) throws Throwable {try {DataSourceContextHolder.setDataSource(targetDataSource.value());return point.proceed();} finally {DataSourceContextHolder.clear();}}
}

3. 数据源的管理与事务问题

多数据源事务管理主要涉及 同一数据源内事务保证跨数据源事务处理

3.1 单数据源事务管理

对于单个数据源,使用 @Transactional 即可正常管理事务。

@Transactional
public void updateUser(User user) {userMapper.updateById(user);
}

3.2 跨数据源事务处理(分布式事务)

由于 @Transactional 只能保证单数据源事务,需要使用 XA 事务TCC 分布式事务方案

  1. XA 事务:使用 Atomikos、Seata 进行全局事务管理。
  2. TCC 事务:利用 Try-Confirm-Cancel 模型管理跨数据源事务。

示例:基于 Seata 进行分布式事务管理

@GlobalTransactional
public void transferMoney(Long fromUserId, Long toUserId, BigDecimal amount) {accountService.decreaseBalance(fromUserId, amount);accountService.increaseBalance(toUserId, amount);
}

4. 多数据源使用中的性能优化

在多数据源场景下,合理优化性能可以减少数据库开销,提高系统吞吐量。

4.1 连接池优化

使用 HikariCP 作为连接池,并合理调整参数,如 maximumPoolSizeidleTimeoutconnectionTimeout 以减少连接创建开销。

示例配置:

spring:datasource:hikari:maximumPoolSize: 20idleTimeout: 30000connectionTimeout: 3000

4.2 减少数据源切换

避免在单个事务中频繁切换数据源,可通过业务拆分减少跨库操作。

4.3 读写分离

采用 主从数据库架构,结合 MyBatis-Plus 的多数据源策略,将 写操作 路由到主库,读操作 路由到从库,提升查询性能。

示例:

@TargetDataSource("slave")
public List<User> getUsers() {return userMapper.selectList(null);
}

5. @DS 注解与 AbstractRoutingDataSource 方式的对比

在 MyBatis-Plus 中,除了 AbstractRoutingDataSource 方式,还可以使用 @DS 注解指定数据源。

5.1 配置

如果使用 @DS 注解(Mybatis-Plus 自带的动态数据源切换),通常需要在 application.yml配置 dynamic,示例如下:

spring:datasource:dynamic:primary: masterdatasource:master:url: jdbc:mysql://localhost:3306/db1username: rootpassword: rootslave:url: jdbc:mysql://localhost:3306/db2username: rootpassword: root

dynamic关键字在这里的作用是 让Mybatis-Plus知道这是一个动态数据源配置,否则@DS 注解无法生效。
如果使用 AbstractRoutingDataSource方式,dynamic 并不是必须的,因为动态数据源的管理是由 AbstractRoutingDataSource及其 determineCurrentLookupKey()方法控制的,数据源的配置可以直接放在 spring.datasource下

5.2 @DS 注解应用

MyBatis-Plus 提供 @DS 注解,可以直接在方法或类级别指定数据源。

@DS("secondary")
@Service
public class OrderService {public List<Order> getOrders() {return orderMapper.selectList(null);}
}

当 @DS 注解作用于类时,类中的所有方法都将默认使用该数据源,除非方法上另有 @DS 注解指定不同的数据源。

方式|适用场景|事务管理|代码侵入性

@DS 注解|方法或类级别的数据源切换|适用于单一方法调用,事务受限|低

AbstractRoutingDataSource|复杂的动态数据源路由|支持自定义事务策略|高

总结

  • @DS 适用于简单的场景,方便快捷。

  • AbstractRoutingDataSource 适用于需要更灵活的数据源控制,如基于用户、请求等动态切换数据源。

通过上述配置和优化,我们可以在 MyBatis-Plus 中实现灵活的多数据源支持,同时保证系统的稳定性和高效性。

http://www.cadmedia.cn/news/7631.html

相关文章:

  • 网站建设教程资源金华百度推广公司
  • 三水建设局招标网站有没有自动排名的软件
  • 医疗器械有哪些产品上海网站排名seo公司哪家好
  • 做兼职的网站贴吧技术优化seo
  • 淄博政府网站建设公司百度小说搜索风云榜排行榜
  • 照片编辑软件行者seo无敌
  • 幼儿园网站建设方案结语专业网络推广软件
  • 网站建设的具体流程求几个好看的关键词
  • 网站建设费用包括哪些无锡seo公司哪家好
  • 在线免费看影视网站竞价排名是按照什么来计费的
  • 深圳龙岗网站建设公司哪家好谷歌商店官网
  • 网站为什么突然访问不了武汉网站推广排名
  • 湛江网站建设价格成都网站建设方案外包
  • 新疆企业电子网站建设家庭优化大师
  • 金华建站软件百度快速收录开通
  • 有哪些关于校园内网站建设的法律新郑网络推广
  • 外部链接链轮的建设对于网站提兰州百度推广的公司
  • 做赌博网站危险吗网站搜索优化价格
  • 如何利用国外分类网站开发客户百度seo营销公司
  • 万户高端网站建设百度号码认证申诉平台
  • 重庆工程建设信息网站青岛百度seo代理
  • 泉州网站建设报价上海网站设计
  • 网站建设 还有需求吗app运营方案
  • 中国商标注册网官方网站北京学校线上教学
  • 字体设计赏析海城seo网站排名优化推广
  • 做兼职哪个网站好百度地图广告投放
  • 剪辑培训网站优化塔山双喜
  • 企业运营网站建设网站备案查询官网
  • 网站建设用户登录推广优化师
  • 晋城政府网站建设宁波seo资源