spring基于通用Dao的多数据源配置详解【ds1】

spring基于通用Dao的多数据源配置详解

有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种方式和资源文件冲突;扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其他名字,最终解决方法如下:

1.在项目中加入如下类MultipleDataSource.java

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package com.etoak.util;

 

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

 

public class MultipleDataSource extends AbstractRoutingDataSource {

   

  private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>(); 

  public static void setDataSourceKey(String dataSource) {

    dataSourceKey.set(dataSource);

  }

  @Override

  protected Object determineCurrentLookupKey() {

    // TODO Auto-generated method stub

    return dataSourceKey.get();

  }

 

}

spring配置文件如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:context="http://www.springframework.org/schema/context"

  xmlns:p="http://www.springframework.org/schema/p"

  xmlns:mvc="http://www.springframework.org/schema/mvc"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-3.2.xsd

    http://www.springframework.org/schema/mvc

    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

 

  <context:component-scan base-package="com"/>

   

  <mvc:annotation-driven/>

   

 

  <context:property-placeholder location="classpath:db.properties"/>

  <bean id="ds1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"

    p:driverClassName="${mysql.driver}"

    p:url="${mysql.url}"

    p:username="${mysql.username}"

    p:password="${mysql.password}"/>

  <bean id="ds2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"

    p:driverClassName="${mysql2.driver}"

    p:url="${mysql2.url}"

    p:username="${mysql2.username}"

    p:password="${mysql2.password}"/>

   

   

  <bean id="multipleDataSource" class="com.etoak.util.MultipleDataSource">

    <property name="defaultTargetDataSource" ref="ds1"/>

    <property name="targetDataSources">

      <map>

        <entry key="ds1" value-ref="ds1"/>

        <entry key="ds2" value-ref="ds2"/>

      </map>

    </property>

  </bean>

   

  <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"

    p:dataSource-ref="multipleDataSource"

    p:mapperLocations="classpath:com/etoak/dao/*-mapper.xml"/>

   

  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <property name="basePackage" value="com.etoak.dao"/>

        <property name="markerInterface" value="com.etoak.dao.BaseDao" />

  </bean>  

   

</beans>

测试类如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

package com.etoak.test;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

 

import com.etoak.dao.ProductDaoIf;

import com.etoak.util.MultipleDataSource;

 

public class Test {

 

  public static void main(String[] args) {

    ApplicationContext ac = new

      FileSystemXmlApplicationContext("WebContent/WEB-INF/etoak-servlet.xml");

     

    ProductDaoIf proDao = (ProductDaoIf)ac.getBean(ProductDaoIf.class);

     

    MultipleDataSource.setDataSourceKey("ds1");

    int count1 = proDao.selectProductCount();

    MultipleDataSource.setDataSourceKey("ds2");

    int count2 = proDao.selectProductCount();

    System.out.println(count1);

    System.out.println(count2);

  }

 

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

原文地址:https://www.cnblogs.com/libin6505/p/10552911.html

时间: 2024-08-06 07:51:45

spring基于通用Dao的多数据源配置详解【ds1】的相关文章

spring基于通用Dao的多数据源配置

有时候在一个项目中会连接多个数据库,须要在spring中配置多个数据源,近期就遇到了这个问题,因为我的项目之前是基于通用Dao的,配置的时候问题不断.这样的方式和资源文件冲突:扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其它名字,终于解决方法例如以下: 1.在项目中增加例如以下类MultipleDataSource.java package com.etoak.util; import

从Spring到SpringBoot构建WEB MVC核心配置详解

目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开发 自动装配 条件装配 外部化配置 本章源码下载 理解Spring WEB MVC架构的演变 基础Servlet架构 核心架构:前端控制器 Spring WEB MVC架构 认识Spring WEB MVC 传统时代的Spring WEB MVC 怎么讲呢?就是很传统的使用Spring Framew

基于RHEL8/CentOS8的网络IP配置详解

? 在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢.? 本文详细阐述基于rhel8的网络配置,包含多种配置方法.? 事先声明:本文提及的所有内容,仅适用rhel8/centos8,因为不同linux系统的NetworkManager行为存在部分差异. 小慢哥的原创文章,欢迎转载 目录 ? rhel8与7的区别? NetworkManager介绍? nmc

Glassfish数据源配置详解

本文环境: Win2003 + myeclipse6.01 + sqlserver2000(sp4) 1. 安装glassfish——启动,在管理控制台下配置如下 首先配置连接池——大家把sqlserver的驱动包放在glassfish安装目录下的lib里. 接着是配置JNDI(同时选中刚才配置好的连接池) 2.测试 常规方法测试1:在servlet中测试代码如下: try { Context ctx = new InitialContext(); DataSource ds = (DataSo

基于Linux搭建Apache网站服务配置详解

Apache作为一款开源软件,是广泛应用的web应用之一,Apache有两个主要版本1.X和2.X,一般我们使用2.X版本,比起1.X版本它支持很多新的功能,下载Apache源码包的地址为:https://httpd.apache.org ,下载到源码包后开始准备安装: 1.为避免发生端口冲突,程序冲突等问题,如果有rpm方式安装的httpd服务,建议将其卸载. 2.挂载系统镜像,切换至系统盘中的Packages目录,安装相关依赖包(注意,最好一个一个的依次安装,因为如果有些安装包已经安装了,一

Spring Boot 2.x Redis多数据源配置(jedis,lettuce)

Spring Boot 2.x Redis多数据源配置(jedis,lettuce) 96 不敢预言的预言家 0.1 2018.11.13 14:22* 字数 65 阅读 727评论 0喜欢 2 多数据源最终表现其实就是 redis connection factory 不同 springboot 默认的redis配置维护了一套 connection factory 自己维护一套 connection factory 即可实现 application.yml spring: redis: # 默

基于Spring Cloud的微服务构建学习-3 Spring Cloud Eureka配置详解

配置详解 在Eureka的服务治理体系中,主要分为服务端与客户端.服务端为服务注册中心,而客户端为各个提供接口的微服务应用.当部署高可用注册中心时,每个服务端也已经成为了客户端,因此,在使用Spring Cloud Eureka的过程中,我们所做的配置内容几乎都是对Eureka客户端配置进行的操作,所以了解这部分的配置内容,对于用好Eureka非常有帮助. 而Eureka服务端更多类似于一个现成产品,大多数情况下,我们不需要修改它的配置信息. Eureka客户端配置分类 服务注册相关配置,包括服

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静

/----------Spring配置详解

博客内容参考:http://book.51cto.com/art/201004/193743.htm   在此对文章作者表示感谢 M1:spring2.5配置详解,如有理解错误,请指正. M2:spring对于每一个java开发人员都不会陌生,要用好每一项技术都要学会举一反三的,下面就罗列出spring配置文件内容详解供参考. M3:主要内容: 头文件:定义使用版本和编码方式 根节点:定义文件规范相关内容 主体部分: 1.开启注解,开启扫描文件,开启面向aop注解 2.spring ioc对be