最新消息:

Shardingbatis 图解原理一:从数据源配置到order表查询

MySQL niuge678 461浏览 0评论

一、数据库主从配置

一个主节点,一个从节点(跟主节点配置相同,高峰期16核64G,低峰4核8G),一个从节点(readonly节点,供印度和中国查询或者做数据分析)。

网络负载平衡(Network Load Balancing, NLB)技术就是将访问压力均衡分布到多台服务器上,以此提高整个服务器集群的响应能力。(为什么需要NLB?因为mysql-proxy是高可用的,需要选择一个节点)NLB是4层负载均衡,跟ALB 7层负载均衡不同。

mysql-proxy本身是主从模式,是高可用的,负责路由到主节点还是从节点,以及主节点发生故障时从节点切换为主节点。(为什么需要proxy?因为主从节点需要路由,故障时需要切换)

每个物理机有两个数据库。

每个数据库都是主从模式,主节点负责读写,一个从节点负责热备,另外一个从节点配置较低负责日常查询。

二、数据源配置

配置在bootstrap.yml,配置4个物理机,8个数据库。

三、读取数据源配置

1、SpringFactoriesLoader.loadFactoryNames()方法将会从calssptah下的META-INF/spring.factories中读取key为org.springframework.context.ApplicationListener的值,并以集合形式返回。

2、spring.factories文件定义监听者: org.springframework.context.ApplicationListener=com.alicp.middleware.shardingbatis.starter.config.ShardingBatisListener,Spring启动会自动加载这个配置文件, 自动加载ShardingBatisListener, 自动执行onApplicationEvent方法。

3、onApplicationEvent执行过程中,配置信息会被加载到spring容器里面。

4、onApplicationEvent执行过程中会调用initShardingBatis -> initBusinessBean -> initLogicDataSource -> beanFactory.registerBeanDefinition("dataSource", beanDefinition),这样数据源就被加载到了容器中。

四、使用方注入SqlSession:

@Qualifier("delegatedSqlSession")
private SqlSession sqlSession;

继而使用getSqlSession().selectOne("OrderDoMapper.countActionsByClientId", orderQuery); 进行查询。

五、SqlSession的注入:

initBusinessBean方法同样会initSqlSessionFactory();,此方法会注入sqlSession:beanFactory.registerBeanDefinition("sqlSession", beanDefinition);。

转载请注明:牛哥678 » Shardingbatis 图解原理一:从数据源配置到order表查询

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址