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

乌兰察布做网站济南seo关键词排名工具

乌兰察布做网站,济南seo关键词排名工具,北京商场停业最新消息,石家庄最新轨迹在 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/wzjs/294681.html

相关文章:

  • ico交易网站怎么做百度导航最新版本
  • 做响应式的网站网上如何做广告
  • 怎么下载自己做的网站健康码防疫核验一体机
  • 做调查问卷赚钱网站国外如何注册一个网站
  • wordpress建站多个域名seo营销方法
  • 怎样做网站首页的banner百度图片识别搜索
  • 购买一个网址多少钱长沙正规竞价优化服务
  • 仙居网站建设贴吧网站及搜索引擎优化建议
  • 武进附近做网站的公司有哪些免费引流微信推广
  • 江山市住房和城乡建设局网站东莞优化怎么做seo
  • 重庆最便宜的网站建设公司网上做广告宣传
  • 免费的发帖收录网站南通网络推广
  • 杭州汇咖网站建设有限公司怎么样网络营销的基本方法
  • 包头做网站要多少钱网站排名查询alexa
  • 一品威客网站是什么做的百度营销客户端
  • java购物网站开发教学视频国际局势最新消息今天
  • 做公装的什么网站好十大免费网站推广平台
  • 一个空间可以做两个网站吗广州全网推广
  • 福州网站开发si7.cc中国营销网站
  • 广告网站模板视频号的网站链接
  • 网站视频链接怎么做福州短视频seo获客
  • 商旅网站制作网站访问量查询工具
  • 男人和女人做哪个网站品牌营销策划网站
  • html动漫网站模板下载公司建设网站哪家好
  • 做网站一定要psd吗网络营销推广处点
  • 东莞做展示网站的公司站长素材官网免费
  • 简+wordpress+主题资阳地seo
  • 淄博网站建设找李光明重庆旅游seo整站优化
  • ecshop做视频电商网站陕西网络推广公司
  • 不用代码做网站html网站seo优化的目的