您的位置:首页 > 编程语言 > Java开发

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 类。

<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 数据库