栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

动态更改Spring数据源

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态更改Spring数据源

你可以通过扩展spring 并覆盖应该返回引用要使用的数据源spring bean的键的方法来使用spring的

AbstractRoutingDataSourcedetermineCurrentLookupKey()

基本上要回答你的问题,你需要做的是在XML配置中将两个数据源定义为不同的spring bean。无需动态创建一个,spring会同时加载两者,并根据

determineCurrentLookupKey()
方法中的条件动态使用一个或另一个。

这将导致类似:

XML配置

<!-- first data source --><bean id="majorDataSource" >    <property name="serverName" value="${jdbc.major.serverName}" />    <property name="portNumber" value="${jdbc.major.portNumber}" />    <property name="user" value="${jdbc.major.username}" />    <property name="password" value="${jdbc.major.password}" />    <property name="databaseName" value="${jdbc.major.databaseName}" /></bean><!-- second data source --><bean id="minorDataSource" >    <property name="serverName" value="${jdbc.minor.serverName}" />    <property name="portNumber" value="${jdbc.minor.portNumber}" />    <property name="user" value="${jdbc.minor.username}" />    <property name="password" value="${jdbc.minor.password}" />    <property name="databaseName" value="${jdbc.minor.databaseName}" /></bean><!-- facade data source --><bean id="dataSource" >   <property name="targetDataSources">      <map>         <entry key="MINOR" value-ref="minorDataSource"/>         <entry key="MAJOR" value-ref="majorDataSource"/>      </map>   </property>   <property name="defaultTargetDataSource" ref="majorDataSource"/></bean><!-- wiring up --><bean id="transactionManager" >    <property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><bean id="sqlSessionFactory" >    <property name="dataSource" ref="dataSource"/>    <property name="configLocation" value="classpath:sqlmap-config.xml"/></bean>

java

public class MyRoutingDataSource extends AbstractRoutingDataSource {   @Override   protected Object determineCurrentLookupKey() {      // get the current url      HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();      if (request.getRequestURL().toString().endsWith("/minor"))          return "MINOR";      else          return "MAJOR";   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号