首页 spring多数据源的处理 mybatis实现跨库查询

spring多数据源的处理 mybatis实现跨库查询

举报
开通vip

spring多数据源的处理 mybatis实现跨库查询实现Myibatis动态sql跨数据库的处理Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性。而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据。Spring配置多数据源的方式和具体使用过程。Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相...

spring多数据源的处理 mybatis实现跨库查询
实现Myibatis动态sql跨数据库的处理Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性。而这样的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据。Spring配置多数据源的方式和具体使用过程。Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相同)。二是,非表级上的跨数据库。即,多个数据源不存在相同的表。Spring2.x的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从Client中分离出来。Client提供选择所需的上下文(因为这是Client所知道的),由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑。一、动态配置多数据源1.数据源的名称常量类:packagecom.hope.common.data;publicclassDataSourceConst{publicstaticfinalStringMANAGER="MANAGER";publicstaticfinalStringSTMT="STMT";publicstaticfinalStringNODB="NODB";}2.建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称:publicclassDataSourceHandle{privatestaticfinalThreadLocalcontextHolder=newThreadLocal();//线程本地环境//设置数据源类型publicstaticvoidsetDataSourceType(StringdataSourceType){contextHolder.set(dataSourceType);}//获取数据源类型publicstaticStringgetDataSourceType(){return(String)contextHolder.get();}//清除数据源类型publicstaticvoidclearDataSourceType(){contextHolder.remove();}3.建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey,该方法返回一个Object,—般是返回字符串:packagecom.hope.datasource;publicclassDynamicDataSourceextendsAbstractRoutingDataSource{}@OverrideprotectedObjectdetermineCurrentLookupKey(){//在进行DAO操作前,通过上下文环境变量,获得数据源的类型returnDataSourceHandle.getDataSourceType();}}4.编写spring的配置文件配置多个数据源vmapkey-type="java.Iang.String">ventryvalue-ref="managerDataSource"key="MANAGER"x/entry>ventryvalue-ref="statDataSource"key="STMT"x/entry>ventryvalue-ref="NODBDataSource"key="NODB"x/entry>v/map>v/property>vpropertyname="defauItTargetDataSource"ref="managerDataSource">v/property>v/bean>5.ibatis相关sqlvselectid="selectDBDictionary"resultMap="BaseResultMap"parameterType="java.lang.lnteger">selecta.id,a.parentid,a.cname,a.priority,a.ifactivefromhopetas_manager.dbo.dictionaryainnerjoinzj.dbo.dictionarybona.id=b.idwherea.parentid=#{id,jdbcType=INTEGER}v/select>6.程序调用:在DAO操作前处理setsetDataSourceType的值//利用递归来处理字段publicvoidgetDict0(Eementelement,Integerid,lntegerj){//设置数据源DataSourceHandle.setDataSourceType(DataSourceConst.NODB);ArrayListlist=(ArrayList)this.dictMapper.selectDBDictionary(id);Stringstr="dir";j++;if(list.size()!=0&&list!=null){for(Iteratoriter=list.iterator();iter.hasNext();){Dictionarydict=(Dictionary)iter.next();Elementel=element.addElement(str+j);Elementpropl=el.addAttribute("id",dict.getId().toString());Elementprop2=el.addAttribute("name",dict.getCname().toString());getDictO(el,dict.getld(),j);}
本文档为【spring多数据源的处理 mybatis实现跨库查询】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_072127
暂无简介~
格式:doc
大小:11KB
软件:Word
页数:4
分类:
上传时间:2021-11-18
浏览量:36