程序是使用的是spring JdbcTemplate架构,简要记录下配置多数据源的方法:

1,设置数据源:

在application.properties文件中配置多个数据源,示例中我配置了2个数据源,如下:

A、oracle

jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@1localhost:1521:dev
jdbc.username=ling
jdbc.password=229

B、Mysql

#mysql
jdbc-mysql.driver=com.mysql.jdbc.Driver
jdbc-mysql.url=jdbc:mysql://localhost:3306/test
jdbc-mysql.username=root
jdbc-mysql.password=229

2、配置applicationContext-dataSource.xml

在applicationContext-dataSource.xml文件中获取数据源,程序使用的是jdbcTemplate架构,如下:

<!-- 数据源配置, oracle -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"><!-- Connection Info --><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- Connection Pooling Info --><property name="maxActive" value="${jdbc.pool.maxActive}" /><property name="maxIdle" value="${jdbc.pool.maxIdle}" /><property name="minIdle" value="0" /><property name="defaultAutoCommit" value="false" />
</bean><!--mysql数据库,配置如下-->
<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc-mysql.driver}" /><property name="url" value="${jdbc-mysql.url}" /><property name="username" value="${jdbc-mysql.username}" /><property name="password" value="${jdbc-mysql.password}" /><property name="maxActive" value="${jdbc.pool.maxActive}" /><property name="maxIdle" value="${jdbc.pool.maxIdle}" /><property name="minIdle" value="0" /><property name="defaultAutoCommit" value="false" />
</bean><!-- 动态数据引用类配置 -->
<bean id="dynamicDataSource" class="com.ffcs.itm.web.rocketmq.base.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry value-ref="dataSource" key="dataSource"></entry><entry value-ref="mysqlDataSource" key="mysqlDataSource"></entry></map></property><property name="defaultTargetDataSource" ref="dataSource"></property>
</bean><!-- jdbcTemplate配置 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dynamicDataSource" /></property>
</bean>

3,动态数据源类

从步骤2中,可以看到使用了DynamicDataSource这个类,这是一个动态数据源类

A、DynamicDataSource

public class DynamicDataSource extends AbstractRoutingDataSource{ @Overrideprotected Object determineCurrentLookupKey() {           return CustomerContextHolder.getCustomerType();}
}

B、CustomerContextHolder

public class CustomerContextHolder {public static final String DATA_SOURCE_ORACLE = "dataSource";// oracle 数据源 和  配置的 key 一样public static final String DATA_SOURCE_MYSQL = "mysqlDataSource";// mysql数据源和配置的key一样  private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();public static void setCustomerType(String customerType) {contextHolder.set(customerType);}public static String getCustomerType() {String dataSource = contextHolder.get();if (StringUtils.isEmpty(dataSource)) {return DATA_SOURCE_MYSQL;} else {return dataSource;}}public static void clearCustomerType() {contextHolder.remove();}}

4,切换数据源

建立service 切换数据源 最好在服务层切换

A、NodeMysqlService

@Service("nodeMysqlService")
public class NodeMysqlService {public String getMysqlCommandSeries() throws ApplicationException {NodeMysqlDao nodeMysqlDao = (NodeMysqlDao) ContextLoader.getCurrentWebApplicationContext().getBean("nodeMysqlDao");String commonSerials = "";try {CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MYSQL); // 切换到mysql数据源commonSerials = nodeMysqlDao.getMysqlCommandSeries();} catch (Exception e) {e.printStackTrace();throw new ApplicationException(e.getMessage());}finally{CustomerContextHolder.clearCustomerType();
// 切换到默认数据源}return commonSerials;}}

B、NodeMysqlDao:

@Component
public class NodeMysqlDao {private  String MYSQL_GET_SEQUENCE = "select branch_id as id fron branch";@Autowiredprivate JdbcTemplate jdbcTemplate;public String getMysqlCommandSeries() throws ApplicationException, SystemException {String sequence = "";Map<String, Object> sequenceMap = new HashMap<String,Object>();try{sequenceMap = jdbcTemplate.queryForMap(MYSQL_GET_SEQUENCE);sequence = Long.toString((Long)sequenceMap.get("id")) ;} catch (Exception e){e.printStackTrace();System.out.println(e.getMessage());}return sequence;}}

其它业务信息就自己建立。

spring mvc 配置多数据源相关推荐

  1. Spring中配置DataSource数据源的几种选择

    Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...

  2. spring MVC配置详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  3. Spring MVC配置多个视图解析器(FreeMarker,JSP)

    Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...

  4. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  5. Spring+Hibernate配置多数据源

    Spring+Hibernate配置多数据源 转载于:https://www.cnblogs.com/zhujiabin/p/4816453.html

  6. Spring MVC 配置--解剖

    http://blog.csdn.net/ailihx/article/details/1909466 Spring MVC 配置--解剖 分类: Spring 2007-11-30 16:40 54 ...

  7. 【Spring学习】spring动态配置多数据源

    这段时间在做智能导航的管理系统--运维系统,涉及到连接多个数据库的问题.因为运维系统要用到智能导航的一些功能,我们目前只是简单的将智能导航整合到运维系统中:运维系统有一个自己的数据库,导航也有自己的数 ...

  8. java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题

    SSM中 Spring MVC配置 传统的web.xml配置 web.xml contextConfigLocation classpath*:applicationContext.xml org.s ...

  9. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

最新文章

  1. 中国剩余定理(孙子定理)的证明和c++求解
  2. 学习Guava Cache知识汇总
  3. python 多级菜单_python多级菜单
  4. 世界农业发展史-国际农民丰收节贸易会:人类的发展史
  5. JAVA 继承和派生4.1-4.3 2020.3.20
  6. 2018年最新的single-cell-RNA-seq analysis repositories
  7. 字符串拼接成insert语句[简单记录]
  8. 路径中有中文怎么解决_时序路径分析
  9. c#中connect函数_Flink算子使用方法及实例演示:union和connect
  10. matlab运动背景位移矢量,位移云图三维位移矢量图
  11. pycharm + python36 + opencv + opencv_contrib库的安装
  12. Leetcode之路径总和II
  13. 台式电脑桌面没有计算机图标,电脑桌面上“我的电脑”的图标没了怎么办
  14. python网易云_Python分析网易云音乐近5年热门歌单
  15. 通过搭建FTP站点实现上传与下载
  16. Mac电脑C盘空间不足怎么办?
  17. App应用最有效的变现方式,还能同时提升留存!
  18. Vue3能用到生产环境了吗?
  19. 未来计算机将朝着微型化成,湖北汽车工业学院大学计算机基础复习题(费劲整理的,带答案,考试命中概率很大)....
  20. 厦门大学354汉语基础考研参考书目

热门文章

  1. myeclipse10.0用什么字体好看?
  2. openEuler安装GNOME图形化桌面
  3. 树莓派搭建NextCloudPi个人网盘
  4. 平安校园:校园APP开发案例分析
  5. 视频直播源码中关于服务端直播开播推送实现
  6. Android cec设备,Android和HDMI CEC
  7. 应用层常见协议——知识点
  8. 邬贺铨院士:网络安全不分国界,网络安全是人才的竞争
  9. 电脑密码忘记了怎么办?
  10. 理解Rao - Cramer不等式