1,配置jdbc.properties

  1. jdbc.driver_one=...
  2. jdbc.url_one=.....
  3. jdbc.username_one=...
  4. jdbc.password_one=..
  5.  
  6. jdbc.driver_two=...
  7. jdbc.url_two=.....
  8. jdbc.username_two=...
  9. jdbc.password_two=..
  10.  
  11. jdbc.initialSize=.....
  12. jdbc.maxActive=....
  13. .....

2,数据源xml 配置

  1. ...
  2. <!-- 读取配置文件信息 -->
  3. <context:property-placeholder ignore-unresolvable="true" location="classpath:*.properties"/>
  4.  
  5. <bean name="dataSource" class="com.hsq.datasource.MultipleDataSource">
  6. <property name="targetDataSources">
  7. <map key-type="java.lang.String">
  8. <entry key="dataSource_one" value-ref="dataSource_one" />
  9. <entry key="dataSource_two" value-ref="dataSource_two" />
  10. </map>
  11. </property>
  12. <!-- 配置默认数据源1-->
  13. <property name="defaultTargetDataSource" ref="dataSource_one" />
  14. </bean>
  15.  
  16. <bean id="dataSource_one" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  17. <!-- 数据库基本配置 -->
  18. <property name="driverClassName" value="${jdbc.driver_one}" />
  19. <property name="url" value="${jdbc.url_one}" />
  20. <property name="username" value="${jdbc.username_one}" />
  21. <property name="password" value="${jdbc.password_one}" />
  22.  
  23. <!-- 初始化连接数量 -->
  24. <property name="initialSize" value="${jdbc.initialSize}"/>
  25. <!-- 最大并发连接数量 -->
  26. <property name="maxActive" value="${jdbc.maxActive}"/>
  27. <!-- 最小空闲连接数 -->
  28. <property name="minIdle" value="${jdbc.minIdle}"/>
  29. <!-- 配置获取连接等待超时的时间 -->
  30. <property name="maxWait" value="${jdbc.maxWait}" />
  31. <!-- 超过时间限制是否回收 -->
  32. <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
  33. <!-- 超过时间限制多长 -->
  34. <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
  35. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  36. <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
  37. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  38. <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
  39. <!-- 用来检测连接是否有效的sql,要求是一个查询语句-->
  40. <property name="validationQuery" value="${jdbc.validationQuery}" />
  41. <!-- 申请连接的时候检测 -->
  42. <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
  43. <!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
  44. <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
  45. <!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
  46. <property name="testOnReturn" value="${jdbc.testOnReturn}" />
  47. <property name="logAbandoned" value="true" />
  48. <!-- 配置监控统计拦截的filterswall用于防止sql注入,stat用于统计分析 -->
  49. <property name="filters" value="stat,log4j" />
  50. </bean>
  51.  
  52. <bean id="dataSource_two" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  53. <!-- 数据库基本配置 -->
  54. <property name="driverClassName" value="${jdbc.driver_two}" />
  55. <property name="url" value="${jdbc.url_two}" />
  56. <property name="username" value="${jdbc.username_two}" />
  57. <property name="password" value="${jdbc.password_two}" />
  58.  
  59. <!-- 初始化连接数量 -->
  60. <property name="initialSize" value="${jdbc.initialSize}"/>
  61. <!-- 最大并发连接数量 -->
  62. <property name="maxActive" value="${jdbc.maxActive}"/>
  63. <!-- 最小空闲连接数 -->
  64. <property name="minIdle" value="${jdbc.minIdle}"/>
  65. <!-- 配置获取连接等待超时的时间 -->
  66. <property name="maxWait" value="${jdbc.maxWait}" />
  67. <!-- 超过时间限制是否回收 -->
  68. <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
  69. <!-- 超过时间限制多长 -->
  70. <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
  71. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  72. <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
  73. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  74. <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
  75. <!-- 用来检测连接是否有效的sql,要求是一个查询语句-->
  76. <property name="validationQuery" value="${jdbc.validationQuery}" />
  77. <!-- 申请连接的时候检测 -->
  78. <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
  79. <!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
  80. <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
  81. <!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
  82. <property name="testOnReturn" value="${jdbc.testOnReturn}" />
  83. <property name="logAbandoned" value="true" />
  84. <!-- 配置监控统计拦截的filterswall用于防止sql注入,stat用于统计分析 -->
  85. <property name="filters" value="stat,log4j" />
  86. </bean>
  87. ...

  3.用枚举类列举数据源:

  1. public enum DbSource {
  2. one("dataSource_one"), two("dataSource_two");
  3. private String value;
  4.  
  5. DbSource(String value) {
  6. this.value = value;
  7. }
  8.  
  9. public String getValue() {
  10. return value;
  11. }
  12. pulic void setValue(){
  13. this.value = value;
  14. }
  15. }

4.数据源配置

  1. /**
  2. * 配置mybatis多数据源,使用 MultipleDataSource.setDataSourceKey("") 配置数据源
  3. *
  4. */
  5. public class MultipleDataSource extends AbstractRoutingDataSource {
  6. private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();
  7.  
  8. public static void setDataSourceKey(String dataSource) {
  9. dataSourceKey.set(dataSource);
  10. }
  11.  
  12. public static String getDataSourceKey() {
  13. return dataSourceKey.get();
  14. }
  15.  
  16. @Override
  17. protected Object determineCurrentLookupKey() {
  18. return dataSourceKey.get();
  19. }
  20. }

5,切换方式

  1. try {
  2. MultipleDataSource.setDataSourceKey(DbSource.two.getValue());
  3. ......
  4. } finally {
  5. MultipleDataSource.setDataSourceKey(DbSource.one.getValue());
  6. }

SpringMVC 中xml 配置多数据源的更多相关文章

  1. springmvc web.xml配置之 -- SpringMVC IOC容器初始化

    SpringMVC IOC容器初始化 首先强调一下SpringMVC IOC容器初始化有些特别,在SpringMVC中除了生成一个全局的spring Ioc容器外,还会为DispatcherServl ...

  2. log4net保存到数据库系列三、代码中xml配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  3. 分享知识-快乐自己:SpringMvc中的四种数据源及相关配置(整合快速集成开发)

     数据库连接: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://39.105.105.186:3306/SpringMybatis?us ...

  4. 关于什么是SpringMVC,和SpringMVC基于xml配置、注解配置、纯注解配置

    首先我们先要了解一下,什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC子框架,也就是说SpringMVC的相关包都 ...

  5. springmvc web.xml配置之 -- ContextLoaderListener

    首先回归一下web.xml的常用配置,看一个示例: <context-param> <param-name>contextConfigLocation</param-na ...

  6. spring 5.x 系列第1篇 —— springmvc基础 (xml配置方式)

    文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关配置讲解 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...

  7. SpringMvc的xml配置与annotation配置的例子的区别

    1.导入jar包时,要在xml配置基础上加 spring-aop-4.2.2.RELEASE.jar (注解的时候需要) 2.编写controller的时候要annotation需要做相关配置即红色部 ...

  8. Spring 中 Xml配置文件属性的说明

    Xml配置文件属性的说明: <bean id="TheAction" ⑴ class="net.xiaxin.spring.qs.UpperAction" ...

  9. spring中xml配置和autowired混用

    1.类的混用: 配置文件中的配置: <bean id="a" class="com.ab.cc.A" /> 类中的配置 @Autowired A a ...

随机推荐

  1. BusyBox ifup udhcpc后台运行

    /********************************************************************** * BusyBox ifup udhcpc后台运行 * ...

  2. Spinner的用法

    1.先自定义一个数组 2.在new一个ArrayAdapter方法: ArrayAdapter<String> adapter = new ArrayAdapter<String&g ...

  3. [TopCoder12141]SweetFruits

    vjudge description 有\(n\)个水果,有一些水果是香的,它们各有一个香度值,剩下的水果是不香的. 现在你要把这\(n\)个水果连成一棵树,定义一个水果是真香的当且仅当它是香的且他与 ...

  4. 重新学习Spring之核心IOC容器的底层原理

    一:IOC容器的定义 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般 ...

  5. POJ3696 The Luckiest number

    题意 Language:Default The Luckiest number Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7 ...

  6. docker默认配置文件不存在问题解决

    Docker默认的配置文件/etc/default/docker或者/etc/sysconfig/docker都不起作用,查看了一下/lib/systemd/system/docker.service ...

  7. Spring 部署Tomcat 404 错误解决方案

    将Spring项目部署到tomcat后,访问网页出现404错误 HTTP Status 404 – Not Found The origin server did not find a current ...

  8. popup控件代码示例

    1.jsp页面input框中的代码 <td class="value"> <input name="demos[0].id" type=&qu ...

  9. ASP.NET 获得当前网页名字

    Code string currentFilePath = HttpContext.Current.Request.FilePath; string CurrentPageName = current ...

  10. php 的两个扩展 memcache 和 memcachd

    今天绕了很大弯子, 因为自己写的php的memcache类. 于是出现了下面问题 在本地测试好好的, 线上就出了问题 原因是线上使用的是memcache, 我本地使用的是memcached 区别参考网 ...