Spring+Mybatis配置主从数据库
2016-09-12 16:02
423 查看
1、数据库的主从分离原理
现在大型的网站服务,在数据库层面大多采用读写分离技术,就是一个数据库负责数据的创建、更新和删除以及实时查询,这个数据库成为主数据库;另外的数据库主要负责非实时数据的查询,称为从数据库。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,影响用户体验。把查询从主库中抽取出来,采用多个从库,使用负载均衡,可以减轻每个从库的查询压力。
2、数据库主从分离的实现
在开发中,怎么实现数据库主从的读写分离呢?常见的方式有:定义2个数据库连接,一个是MasterDataSource,另一个是SlaveDataSource。更新数据时读取MasterDataSource,查询数据时读取SlaveDataSource。那么,问题来了,以往在spring和hibernate或者Mybatis框架中总是配置一个数据源,因而sessionFactory的dataSource属性总是指向这个数据源并且恒定不变,所有DAO在使用sessionFactory的时候都是通过这个数据源访问数据库。但是现在怎样很方便的切换多个数据源呢?
文章如何在spring框架中解决多数据源的问题 给出了一个比较好的解决方案。
1)掌握配置的前提知识
Spring对数据库的连接进行了封装,使得在利用spring配置数据源的时候,可以很方便的进行。
spring 的AbstractRoutingDataSource 类。
private Map<Object, Object> targetDataSources;
private Object defaultTargetDataSource;
private DataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
private Map<Object, DataSource> resolvedDataSources;
private DataSource resolvedDefaultDataSource;
稍等...
现在大型的网站服务,在数据库层面大多采用读写分离技术,就是一个数据库负责数据的创建、更新和删除以及实时查询,这个数据库成为主数据库;另外的数据库主要负责非实时数据的查询,称为从数据库。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,影响用户体验。把查询从主库中抽取出来,采用多个从库,使用负载均衡,可以减轻每个从库的查询压力。
2、数据库主从分离的实现
在开发中,怎么实现数据库主从的读写分离呢?常见的方式有:定义2个数据库连接,一个是MasterDataSource,另一个是SlaveDataSource。更新数据时读取MasterDataSource,查询数据时读取SlaveDataSource。那么,问题来了,以往在spring和hibernate或者Mybatis框架中总是配置一个数据源,因而sessionFactory的dataSource属性总是指向这个数据源并且恒定不变,所有DAO在使用sessionFactory的时候都是通过这个数据源访问数据库。但是现在怎样很方便的切换多个数据源呢?
文章如何在spring框架中解决多数据源的问题 给出了一个比较好的解决方案。
1)掌握配置的前提知识
Spring对数据库的连接进行了封装,使得在利用spring配置数据源的时候,可以很方便的进行。
spring 的AbstractRoutingDataSource 类。
<span class="keyword" style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; color: rgb(127, 0, 85); font-weight: bold; background-color: rgb(250, 250, 250);">public</span><span style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; background-color: rgb(250, 250, 250);"> </span><span class="keyword" style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; color: rgb(127, 0, 85); font-weight: bold; background-color: rgb(250, 250, 250);">abstract</span><span style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; background-color: rgb(250, 250, 250);"> </span><span class="keyword" style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; color: rgb(127, 0, 85); font-weight: bold; background-color: rgb(250, 250, 250);">class</span><span style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; background-color: rgb(250, 250, 250);"> AbstractRoutingDataSource </span><span class="keyword" style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; color: rgb(127, 0, 85); font-weight: bold; background-color: rgb(250, 250, 250);">extends</span><span style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; background-color: rgb(250, 250, 250);"> AbstractDataSource </span><span class="keyword" style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; color: rgb(127, 0, 85); font-weight: bold; background-color: rgb(250, 250, 250);">implements</span><span style="font-size: 1em; line-height: 18px; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Consolas, "Courier New", monospace; background-color: rgb(250, 250, 250);"> InitializingBean { </span>
private Map<Object, Object> targetDataSources;
private Object defaultTargetDataSource;
private DataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
private Map<Object, DataSource> resolvedDataSources;
private DataSource resolvedDefaultDataSource;
稍等...
相关文章推荐
- spring-spring mvc-mybatis 实现主从数据库配置
- springmvc+mybatis主从数据库的配置
- spring-spring mvc-mybatis 实现主从数据库配置
- spring-spring mvc-mybatis 实现主从数据库配置
- 以一个简单JDBC示例对比Mybatis环境配置和Spring的数据库环境配置
- 【系列】使用springmvc+mybatis创建Web应用(二)—— 数据库、配置和测试
- Spring + Mybatis配置多数据库
- springMvc-Mybatis 实现主从数据库/多数据源切换配置
- 未测试---- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- spring+spring mvc +mybatis+druid 实现数据库主从分离
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- 解决整合spring和mybatis后数据源配置文件读取错误,错误提示数据库用户名密码错误。
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mysql+spring+mybatis实现数据库读写分离[代码配置] .
- Spring JDBC主从数据库访问配置
- 单个工程中Spring+Mybatis连接多个数据库的配置(个人分享版本)
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- 单个工程中Spring+Mybatis连接多个数据库的配置(个人研究版本)
- springmvc+mybatis 数据库配置