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

做再生料的网站四川seo技术培训

做再生料的网站,四川seo技术培训,本地wordpress站点上传,正规的公司网站建设在 Spring Boot 中实现多数据源拆分,需根据业务需求(如读写分离、模块隔离、多租户等)选择合适的方案。以下是核心思路及实现方式: 🔧 一、配置多个数据源 在 application.yml 中为每个数据源定义独立配置&#xff1a…

在 Spring Boot 中实现多数据源拆分,需根据业务需求(如读写分离、模块隔离、多租户等)选择合适的方案。以下是核心思路及实现方式:


🔧 一、配置多个数据源

application.yml 中为每个数据源定义独立配置:

spring:datasource:primary:url: jdbc:mysql://localhost:3306/db1username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driversecondary:url: jdbc:mysql://localhost:3306/db2username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

通过 @Configuration 类创建多个 DataSource Bean:

@Configuration
public class DataSourceConfig {// 主数据源@Bean@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}// 从数据源@Bean@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

🔀 二、动态数据源切换(核心方案)

1. 继承 AbstractRoutingDataSource

自定义路由类,根据线程上下文选择数据源:

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSourceType(); // 返回数据源标识(如"primary")}
}
2. 管理数据源上下文

通过 ThreadLocal 存储当前线程的数据源标识:

public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();public static void setDataSourceType(String dsType) {contextHolder.set(dsType);}public static String getDataSourceType() {return contextHolder.get();}public static void clear() {contextHolder.remove();}
}
3. 通过 AOP 自动切换

使用自定义注解(如 @DS("secondary"))标注方法,在切面中动态切换数据源:

@Aspect
@Component
public class DataSourceAspect {@Before("@annotation(ds)")public void switchDataSource(JoinPoint point, DS ds) {DataSourceContextHolder.setDataSourceType(ds.value()); }@After("@annotation(ds)")public void restoreDataSource(DS ds) {DataSourceContextHolder.clear(); }
}

📦 三、分包管理方案(替代方案)

将不同数据源的 DAO/Mapper 分别放入独立包路径,并为每个包配置独立的 SqlSessionFactory

@Configuration
@MapperScan(basePackages = "com.example.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {@Beanpublic SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}
}

适用场景:业务模块边界清晰、数据源切换频率低。


⚠️ 四、事务管理

多数据源需单独配置事务管理器,避免跨库事务问题:

@Bean
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);
}

注意:跨数据源操作如需强一致性,需引入分布式事务(如 Atomikos)。


🎯 五、适用场景

场景方案推荐
读写分离动态路由 + AOP 注解切换
业务模块隔离分包管理 + 独立事务管理器
多租户动态路由(按租户标识切换)
分库分表ShardingSphere 集成

💡 关键注意事项

  1. 避免循环依赖:配置类中需明确 @Primary 数据源。
  2. 连接池配置:为每个 DataSource 单独设置连接池参数(如 HikariCP)。
  3. 性能监控:多数据源需独立监控 SQL 执行性能。
  4. 跨库查询限制:尽量避免跨库关联查询,可通过冗余字段或业务层拼接解决。

动态路由方案灵活性高但复杂度稍高,适合高频切换场景;分包方案更简单直观,适合模块化架构。根据实际业务负载和团队技术储备选择。

http://www.dtcms.com/a/429521.html

相关文章:

  • 网站建设奖项有效的网站推广方式
  • 网站中链接怎么做有限公司章程
  • 做网站和做公众号网站首页图片大小
  • 建设企业网站企业网上银行网站规划思想方法有哪些内容
  • 怎么能在百度上做推广网站三大标签优化
  • 爱站网做网站吗网站建设中英语如何说
  • 儿童做网站广告传媒公司网站怎么做
  • 棋牌游戏在哪做网站无锡知名网站推广
  • 福州网站建设电话seo哪里可以学
  • 手机做网站公司企业网络营销方案策划
  • 无锡网站建设哪里好wordpress 图片展示 插件
  • 做网站前后端的发布流程查询公司营业执照的网站
  • 商务网站的规划与建设总结wordpress手机适配
  • 天津七七一网站建设有限公司怎么样网站页面设置
  • 广州做网站费用wordpress 做的人多吗?
  • zencart网站地图生成宁波谷歌优化
  • 在线网站建设哪家便宜东莞动点网络科技有限公司
  • 做网站微信朋友圈应该怎么发网站建设规模与类别
  • 做一个网站成本多少钱php网站颜色改变
  • 官网网站备案流程图做公益筹集项目的网站
  • 零食网站建设的必要性成都网络营销网站
  • 网站开发电销常遇到问题求职简历
  • 常州手机网站建设网站建设什么代码最简单
  • 用邮箱地址做网站域名好吗dz网站开发
  • 专业网站建设制作云南网直播
  • 博罗网站建设开源建站工具
  • 做网站如何收集资料个人主页生成
  • 用帝国cms做企业网站做企业网站哪里找
  • 网站建设犀牛濮阳房产网
  • 锤子手机网站模板东莞大岭山网站制作