工作中需要接入其他公司业务系统的数据进行分析,于是接入它们的db。

使用双数据源配置感觉如下:

  database、sessionFactory、扫描器、事务管理器等双份。 听说如果两个数据源需要一起使用加事务的时候有点恶心,没有遇到该业务问题所以没有深入。

具体配置:

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="com.kunpu.appopm.dal.config.JDBCPlaceholderConfigurer">
<property name="order" value=""/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="location" value="file:/opt/configs/appopm/datasource.properties"/>
</bean> <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${datasource.driverClassName}"/>
<property name="url" value="${datasource1.url}"/>
<property name="username" value="${datasource1.username}"/>
<property name="password" value="${datasource1.password}"/>
<property name="connectionProperties" value="${datasource.connectionProperties}"/>
<property name="initialSize" value="${datasource.initialsize}"/>
<property name="maxActive" value="${datasource.maxActive}"/>
<property name="minIdle" value="${datasource.minIdle}"/>
<property name="maxWait" value="${datasource.maxWait}"/>
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
<property name="testOnBorrow" value="${datasource.testOnBorrow}"/>
<property name="testOnReturn" value="${datasource.testOnReturn}"/>
<property name="testWhileIdle" value="${datasource.testWhileIdle}"/>
<property name="timeBetweenEvictionRunsMillis"
value="${datasource.timeBetweenEvictionRunsMillis}"/>
<property name="minEvictableIdleTimeMillis"
value="${datasource.minEvictableIdleTimeMillis}"/>
<property name="removeAbandoned" value="${datasource.removeAbandoned}"/>
<property name="removeAbandonedTimeout" value="${datasource.removeAbandonedTimeoutMillis}"/>
<property name="logAbandoned" value="${datasource.logAbandoned}"/>
<property name="filters" value="${datasource.filters}"/>
<property name="poolPreparedStatements" value="${datasource.poolPreparedStatements}"/>
<property name="maxPoolPreparedStatementPerConnectionSize"
value="${datasource.maxPoolPreparedStatementPerConnectionSize}"/>
</bean> <bean id="sessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1"/>
<property name="configLocation" value="classpath:/configs/mybatis-config.xml"/>
<property name="mapperLocations">
<list>
<value>classpath:/mapper1/**/*.xml</value>
</list>
</property>
<property name="typeAliasesPackage" value="com.kunpu.appopm.dal.model"/>
<property name="plugins">
<list>
<bean class="com.kunpu.appopm.common.util.log.SQLLogInterceptor"/>
<bean class="com.kunpu.frameworks.cat.util.CatDBInterceptor"/>
<bean class="com.kunpu.frameworks.db.pagination.PaginationInterceptor">
<property name="dialect">
<bean class="com.kunpu.frameworks.db.pagination.MySqlDialect"/>
</property>
</bean>
</list>
</property>
</bean> <bean id="scanner1" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sessionFactory1"/>
<property name="basePackage" value="com.kunpu.appopm.dal"/>
<property name="annotationClass" value="com.kunpu.appopm.dal.config.BaseDB"/>
<property name="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper
IDENTITY=MYSQL
notEmpty=true
</value>
</property>
</bean> <bean id="sqlSessionTemplate1" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="" ref="sessionFactory1"/>
</bean> <bean id="transactionManager1"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource1"/>
</bean> <!-- 事务模板 -->
<bean id="transactionTemplate1"
class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager1"/>
<constructor-arg name="transactionManager" ref="transactionManager1"/>
</bean> <bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${datasource.driverClassName}"/>
<property name="url" value="${datasource2.url}"/>
<property name="username" value="${datasource2.username}"/>
<property name="password" value="${datasource2.password}"/>
<property name="connectionProperties" value="${datasource.connectionProperties}"/>
<property name="initialSize" value="${datasource.initialsize}"/>
<property name="maxActive" value="${datasource.maxActive}"/>
<property name="minIdle" value="${datasource.minIdle}"/>
<property name="maxWait" value="${datasource.maxWait}"/>
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
<property name="testOnBorrow" value="${datasource.testOnBorrow}"/>
<property name="testOnReturn" value="${datasource.testOnReturn}"/>
<property name="testWhileIdle" value="${datasource.testWhileIdle}"/>
<property name="timeBetweenEvictionRunsMillis"
value="${datasource.timeBetweenEvictionRunsMillis}"/>
<property name="minEvictableIdleTimeMillis"
value="${datasource.minEvictableIdleTimeMillis}"/>
<property name="removeAbandoned" value="${datasource.removeAbandoned}"/>
<property name="removeAbandonedTimeout" value="${datasource.removeAbandonedTimeoutMillis}"/>
<property name="logAbandoned" value="${datasource.logAbandoned}"/>
<property name="filters" value="${datasource.filters}"/>
<property name="poolPreparedStatements" value="${datasource.poolPreparedStatements}"/>
<property name="maxPoolPreparedStatementPerConnectionSize"
value="${datasource.maxPoolPreparedStatementPerConnectionSize}"/>
</bean> <bean id="scanner2" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sessionFactory2"/>
<property name="basePackage" value="com.kunpu.appopm.dal"/>
<property name="annotationClass" value="com.kunpu.appopm.dal.config.BaseDB2"/>
<property name="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper
IDENTITY=MYSQL
notEmpty=true
</value>
</property>
</bean> <bean id="sessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2"/>
<property name="configLocation" value="classpath:/configs/mybatis-config.xml"/>
<property name="mapperLocations">
<list>
<value>classpath:/mapper2/**/*.xml</value>
</list>
</property>
<property name="typeAliasesPackage" value="com.kunpu.appopm.dal.model"/>
<property name="plugins">
<list>
<bean class="com.kunpu.appopm.common.util.log.SQLLogInterceptor"/>
<bean class="com.kunpu.frameworks.cat.util.CatDBInterceptor"/>
<bean class="com.kunpu.frameworks.db.pagination.PaginationInterceptor">
<property name="dialect">
<bean class="com.kunpu.frameworks.db.pagination.MySqlDialect"/>
</property>
</bean>
</list>
</property>
</bean> <bean id="sqlSessionTemplate2" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="" ref="sessionFactory2"/>
</bean> <bean id="transactionManager2"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource2"/>
</bean> <!-- 事务模板 -->
<bean id="transactionTemplate2"
class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager1"/>
<constructor-arg name="transactionManager" ref="transactionManager1"/>
</bean>

这里扫描指定dao使用的是basePage配合指定注解,应该是一点亮点吧。

ssm使用双数据源的更多相关文章

  1. Spring Boot 集成 Mybatis 实现双数据源

    这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源实现数据库的读写分离. 添加依赖 加入Mybatis启动器,这里添加了D ...

  2. spring+mybatis 配置双数据源

    配置好后,发现网上已经做好的了, 不过,跟我的稍有不同, 我这里再拿出来现个丑: properties 文件自不必说,关键是这里的xml: <?xml version="1.0&quo ...

  3. Spring Boot2.4双数据源的配置

    相较于单数据源,双数据源配置有时候在数据分库的时候可能更加有利 但是在参考诸多博客以及书籍(汪云飞的实战书)的时候,发现对于spring boot1.X是完全没问题的,一旦切换到spring boot ...

  4. spring项目配置双数据源读写分离

    我们最早做新项目的时候一直想做数据库的读写分离与主从同步,由于一些原因一直没有去做这个事情,这次我们需要配置双数据源的起因是因为我们做了一个新项目用了另一个数据库,需要把这个数据库的数据显示到原来的后 ...

  5. Spring Boot集成Mybatis双数据源

    这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源实现数据库的读写分离. 添加依赖 加入Mybatis启动器,这里添加了D ...

  6. MyBatis整合双数据源

    有时候在项目中会遇到需要连接两个数据库的情况.本文就结合Spring和Mybatis来讲下怎么使用双数据源(或者是多数据源). 背景知识介绍 本文中实现多数据源的关键是Spring提供的Abstrac ...

  7. SSM动态切换数据源

    有需求就要想办法解决,最近参与的项目其涉及的三个数据表分别在三台不同的服务器上,这就有点突兀了,第一次遇到这种情况,可这难不倒笔者,资料一查,代码一打,回头看看源码,万事大吉 1. 预备知识 这里默认 ...

  8. spring-boot支持双数据源mysql+mongo

    这里,首先想说的是,现在的web应用,处理的数据对象,有结构化的,也有非结构化的.同时存在.但是在spring-boot操作数据库的时候,若是在properties文件中配置数据源的信息,通过默认配置 ...

  9. MyBatis双数据源配置

    配置相关 jdbc 配置 #============================================================================ # MySQL # ...

随机推荐

  1. LeetCode--383--赎金信

    问题描述: 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true ...

  2. 20180830xlVBA_合并计算

    Sub WorkbooksSheetsConsolidate() Rem 设置求和区域为 sheet名称/单元格区域;sheet名称/单元格区域 Const Setting As String = & ...

  3. canvas学习之树叶动画

    项目地址:http://pan.baidu.com/s/1geJgqen 今天用canvas做了一个树叶发芽到凋落的动画,当然还有很多不完善的地方,不过也让我体会到了,做动画技术占2分,算法占8分.这 ...

  4. 结合canvas和jquery.Jcrop.js裁切图像上传图片

    1.引入的外部资源: jquery.Jcrop.css.jquery.Jcrop.js.upimg.js 2.使用的页面元素 @* 选择照片 *@ <div class="line&q ...

  5. 最长回文字串——manacher算法

    时间复杂度:O(n) 参考:https://segmentfault.com/a/1190000003914228 1.问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一个字 ...

  6. mysql存储引擎的对比

  7. Laravel中APP_KEY起什么作用

    框架中是这样描述的: This key is used by the Illuminate encrypter service and should be set to a random, 32 ch ...

  8. atom - Emmet插件使用,代码快速填写

    参考转载:http://www.hangge.com/blog/cache/detail_1537.html 用法: 输入:ul>li*6    接着按:tab键 常用语法: 1.后代>: ...

  9. Beta阶段——第6篇 Scrum 冲刺博客

    Beta阶段--第6篇 Scrum 冲刺博客 标签:软件工程 一.站立式会议照片 二.每个人的工作 (有work item 的ID) 昨日已完成的工作 人员 工作 林羽晴 完成了函数的编写,提供报表数 ...

  10. vscode代码保存时自动格式化成ESLint风格(支持VUE)

    一.问题 vscode的默认的代码格式化ctrl+shift+f 无法通过eslint的代码风格检查是一个非常蛋疼的问题 同样在进行vue项目开发的时候,使用eslint代码风格检查是没啥问题的,但是 ...