Spring MVC Mybatis多数据源的使用实例解析_java

项目需要从其他网站获取数据,因为是临时加的需求,在开始项目时没想到需要多数据源

于是百度了一下,发现只需要改动一下Spring 的applicationContext.xml文件和编写三个工具类就可以完美实现

applicationContext.xml

<!-- 多数据源配置 -->
 <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="" />
 </bean>
 <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="" />
  <property name="url" value="" />
  <property name="username" value="" />
  <property name="password" value="" />
 </bean>
 <!-- 动态配置数据源 -->
 <bean id="dataSource" class="com.test.utils.DynamicDataSource">//这里是你项目里DynamicDataSource.java的路径
  <property name="targetDataSources">
   <map key-type="java.lang.String">
    <entry value-ref="ds_admin" key="ds1"></entry>
    <entry value-ref="ds_partner" key="ds2"></entry>
   </map>
  </property>
  <!-- 默认使用ds1的数据源 -->
  <property name="defaultTargetDataSource" ref="ds_admin"></property>
 </bean>

DataSourceContextHolder.java

public class DataSourceContextHolder {
 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 public static void setDbType(String dbType) {
  contextHolder.set(dbType);
 }
 public static String getDbType() {
  return ((String) contextHolder.get());
 }
 public static void clearDbType() {
  contextHolder.remove();
 }
}

DataSourceType.java(设置静态变量)

public class DataSourceType {
 // 默认数据库
 public static final String SOURCE_ADMIN = "ds1";
 // 第二个数据库,在applicationContext.xml里的id
 public static final String SOURCE_PARTNER = "ds2";
}

接下来这个是关键DynamicDataSource.java 它继承了AbstractRoutingDataSource中的抽象方法determineCurrentLookupKey是实现数据源的route的核心.这里对该方法进行Override。

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
 @Override
 protected Object determineCurrentLookupKey() {
  return DataSourceContextHolder.getDbType();
 }
}

以上所述是小编给大家介绍的Spring MVC Mybatis多数据源的使用实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索spring
, mvc
, 多数据源
mybatis数据源
springmvcmybatis实例、spring mybatis数据源、spring mvc 多数据源、springmvc数据源配置、springmvc 动态数据源,以便于您获取更多的相关知识。

时间: 2024-08-04 08:49:52

Spring MVC Mybatis多数据源的使用实例解析_java的相关文章

Spring MVC+Mybatis+Maven+Velocity+Mysql 连不上数据库

问题描述 Spring MVC+Mybatis+Maven+Velocity+Mysql 连不上数据库 我的mysql没有设置密码 本地数据库可以 直接登上去的 项目里面就是连不上说密码错误 是什么原因 解决方案 解决方案二: 别的密码也试过了 反正都是本地用nativecat可以登上去 项目里面运行的时候一直都是密码错误 解决方案三: Spring MVC+Mybatis+Maven+Velocity+Mysql 解决方案四: jia qun 482547245

spring- Jersey+Spring mvc + mybatis 实现rest 接口

问题描述 Jersey+Spring mvc + mybatis 实现rest 接口 java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineC

新手求问,关于spring MVC+mybatis 的数据查询。。。

问题描述 新手求问,关于spring MVC+mybatis 的数据查询... 解决方案 select count(1),type from table group by type 解决方案二: 这个和springmvc以及mybatis没有关系,,只是一个逻辑的问题而已,查询后按不同的name统计不就可以了吗

spring mvc+mybatis框架使用怎么ajax无刷新批量上传图片?

问题描述 spring mvc+mybatis框架使用怎么ajax无刷新批量上传图片? spring mvc+mybatis框架怎么使用ajax无刷新批量上传图片?上传之后显示,哪位大神能不能给个demo,谢谢! 解决方案 Mvc Ajax 图片上传

我用spring mvc+mybatis整合为什么出这个错误,是不是路径错误?我是新手,请大神指教

问题描述 我用spring mvc+mybatis整合为什么出这个错误,是不是路径错误?我是新手,请大神指教 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:JAVANewWorkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebappsstudent

Spring MVC + MyBatis整合(IntelliJ IDEA环境下)

原文:Spring MVC + MyBatis整合(IntelliJ IDEA环境下) 一些重要的知识: mybais-spring.jar及其提供的API: SqlSessionFactoryBean: SqlSessionFactory是由SqlSessionFactoryBuilder产生的,Spring整合MyBats时SqlSessionFactoryBean也是由SqlSessionFactoryBuilder生成的. MapperFactoryBean: 在使用MapperFact

spring mvc + mybatis配置多个数据源问题。

惯例: 我是温浩然: 用过spring MVC的都知道,项目的每一小块,都分成,controller,dao,service,module,基本是这四块,分别是,实现需求的控制器,数据库操作的方法,实现需求的方法,和实体类. 用mybatis来改装后,dao就会被mapper来代替了. 但是有一个问题,如果一个项目中,模块不多,没必要按照每个模块来划分,但是,还是根据spring mvc的模式来划分,就很有可能,多个数据源,都放到同一个dao,中. 也就是,多个数据库放到同一个mapper中,这

spring mvc+mybatis 事务控制不起作用

问题描述 用的是spring mvc和mybatis框架.数据库是mysql.然后发现事务配置了不起作用..业务逻辑是新增用户,用户新增成功之后再在其他表插入一条对应的用户角色关联信息.现在问题是假如用户插入成功之后..插入对应的用户角色关联信息出错后,用户那条新增记录不能自动删除.看了很多人说是因为@service提前扫描的问题.那个我改过了.还有说是表的引擎不是InnoDB.但是我们建的表是InnoDB.还有说要抛出RuntimeException.我也抛出了..但是还是没用.没办法.请大家

Spring与Mybatis基于注解整合Redis的方法_java

基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载后直接启动redis-server就行了,见下图: 一,先上jar包 二,创建实体类 package com.sl.user.vo; import java.io.Serializable; import com.fasterxml.jackson.databind.PropertyNamingSt