spring mvc 配置多数据源
程序是使用的是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 配置多数据源相关推荐
- Spring中配置DataSource数据源的几种选择
Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...
- spring MVC配置详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...
- Spring MVC配置多个视图解析器(FreeMarker,JSP)
Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...
- java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- Spring+Hibernate配置多数据源
Spring+Hibernate配置多数据源 转载于:https://www.cnblogs.com/zhujiabin/p/4816453.html
- Spring MVC 配置--解剖
http://blog.csdn.net/ailihx/article/details/1909466 Spring MVC 配置--解剖 分类: Spring 2007-11-30 16:40 54 ...
- 【Spring学习】spring动态配置多数据源
这段时间在做智能导航的管理系统--运维系统,涉及到连接多个数据库的问题.因为运维系统要用到智能导航的一些功能,我们目前只是简单的将智能导航整合到运维系统中:运维系统有一个自己的数据库,导航也有自己的数 ...
- java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题
SSM中 Spring MVC配置 传统的web.xml配置 web.xml contextConfigLocation classpath*:applicationContext.xml org.s ...
- mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
最新文章
- 中国剩余定理(孙子定理)的证明和c++求解
- 学习Guava Cache知识汇总
- python 多级菜单_python多级菜单
- 世界农业发展史-国际农民丰收节贸易会:人类的发展史
- JAVA 继承和派生4.1-4.3 2020.3.20
- 2018年最新的single-cell-RNA-seq analysis repositories
- 字符串拼接成insert语句[简单记录]
- 路径中有中文怎么解决_时序路径分析
- c#中connect函数_Flink算子使用方法及实例演示:union和connect
- matlab运动背景位移矢量,位移云图三维位移矢量图
- pycharm + python36 + opencv + opencv_contrib库的安装
- Leetcode之路径总和II
- 台式电脑桌面没有计算机图标,电脑桌面上“我的电脑”的图标没了怎么办
- python网易云_Python分析网易云音乐近5年热门歌单
- 通过搭建FTP站点实现上传与下载
- Mac电脑C盘空间不足怎么办?
- App应用最有效的变现方式,还能同时提升留存!
- Vue3能用到生产环境了吗?
- 未来计算机将朝着微型化成,湖北汽车工业学院大学计算机基础复习题(费劲整理的,带答案,考试命中概率很大)....
- 厦门大学354汉语基础考研参考书目