Spring多数据源解决方案_第1页
Spring多数据源解决方案_第2页
Spring多数据源解决方案_第3页
Spring多数据源解决方案_第4页
Spring多数据源解决方案_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在很多大型应用中都会对数据进行切分,并且采用多个数据库实例进行管理,提高系统的水平伸缩性。而这样的方案就会不同于常见的单一数据实例的方案,在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,哪个数据库提取数据。

这样可以有效这就要程序以及从Figure1 数据分割及多数据库架构通常这种多数据源的逻辑会渗透到业务逻辑中,同时也会给我们使用的数据访问

API

诸如Hibernate

iBatis

等带来不便(需要指定多个

SessionFactory

SqlMapClient

实例来对应多个

DataSource

)。Figure2 多数据源的选择逻辑渗透至客户端解决方案Figure3 采用Proxy模式来封装数据源选择逻辑通过采用Proxy模式我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从 Client中分离出来。Client提供选择所需的上下文(因为这是 Client所知道的),由虚拟的 DataSource 根据Client提供的上下文来实现数据源的选择。Spring2.x 的版本中提供了实现这种方式的基本框架,虚拟的 DataSource 仅需继承AbstractRoutingDataSource 实现determineCurrentLookupKey() 在其中封装数据源的选择逻辑。Java代码1. publicclassDynamicDataSource extends AbstractRoutingDataSource{2.3.staticLoggerlog=Logger.getLogger("DynamicDataSource");4.@OtectedObjectdetermineCurrentLookupKey(){8.StringuserId=(String)DbContextHolder.getContext();10.IntegerdataSourceId=getDataSourceIdByUserId(userId);returndataSourceId;}17. }Java代码1. publicclassDynamicDataSource extends AbstractRoutingDataSource{2.3. static Loggerlog=Logger.getLogger( "DynamicDataSource" );4.@OtectedObjectdetermineCurrentLookupKey(){8.StringuserId=(String)DbContextHolder.getContext();11. IntegerdataSourceId=getDataSourceIdByUserId(userId);12.returndataSourceId;}17. }实例中通过 UserId来决定数据存放在哪个数据库中。配置文件示例:Xml代码<beanid="dataSource" >2.3.<propertyname="targetDataSources">4.5.<mapkey-type="java.lang.Integer">6.7.<entrykey="0"value-ref="dataSource0"/>8.9.<entrykey="1"value-ref="dataSource1"/>10.11.<entrykey="2"value-ref="dataSource2"/>12.</map></property>17.<propertyname="defaultTargetDataSource"ref="dataSource0"/>18.</bean>21. <beanid="sqlMapClient" >22.23. <property name="configLocation"value="classpath:com/bitfone/smartdm/dao/sqlmap/sql-map-config.xml" />24.25. <property name="dataSource"ref="dataSource"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论