springBoot 双数据源配置 (Oracle+ SQL sever)主数据源配置setMapperLocations多个路径
1.添加pom依赖 (部分)
<!--添加 阿里连接池 支持--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!--添加Oracle 支持--><dependency><groupId>com.oracle.ojdbc</groupId><artifactId>ojdbc8</artifactId><version>19.3.0.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version><exclusions><exclusion><artifactId>mybatis</artifactId><groupId>org.mybatis</groupId></exclusion></exclusions></dependency><!--添加SQL server 支持--><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>8.4.1.jre8</version></dependency>
2. 配置文件配置
properties 配置
#多数据源配置
########################## oracle ##########################
#数据库配置
spring.datasource.druid.master.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.master.driver-class-name=oracle.jdbc.driver.oracledriver
spring.datasource.druid.master.url=jdbc:oracle:thin:@[ip地址]:[端口号]/[服务名]
spring.datasource.druid.master.username=用户名
spring.datasource.druid.master.password=密码########################## druid配置 ##########################
# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大
################## 连接池配置 ################
#连接池建立时创建的初始化连接数
spring.datasource.druid.master.initial-size=5
#连接池中最大的活跃连接数
spring.datasource.druid.master.initialSize=1
spring.datasource.druid.master.minIdle=1
spring.datasource.druid.master.maxActive=200
spring.datasource.druid.master.maxWait=60000
spring.datasource.druid.master.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.master.minEvictableIdleTimeMillis=300000
spring.datasource.druid.master.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.master.test-while-idle=true
spring.datasource.druid.master.test-on-borrow=true
spring.datasource.druid.master.filters=stat
spring.datasource.druid.master.stat-view-servlet.login-username=admin
spring.datasource.druid.master.stat-view-servlet.login-password=admin
spring.datasource.druid.master.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.master.max-active=20########################## mybatis ##########################
#mapper.xml文件放置的位置
#mybatis.mapper-locations=classpath:mapper/*.xml########################## SQLServer ###########################数据库配置
spring.datasource.druid.slave.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.slave.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.druid.slave.url=jdbc:sqlserver://[ip地址];DatabaseName=[名称]
spring.datasource.druid.slave.username=用户名
spring.datasource.druid.slave.password=密码
########################## druid配置 ##########################
# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大
################## 连接池配置 ################
#连接池建立时创建的初始化连接数
spring.datasource.druid.slave.initial-size=5
#连接池中最大的活跃连接数
spring.datasource.druid.slave.max-active=20
#连接池中最小的活跃连接数
spring.datasource.druid.slave.min-idle=5
# 配置获取连接等待超时的时间
spring.datasource.druid.slave.max-wait=60000
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.slave.pool-prepared-statements=true
spring.datasource.druid.slave.max-pool-prepared-statement-per-connection-size=20
#spring.datasource.druid.max-open-prepared-statements= #和上面的等价
spring.datasource.druid.slave.validation-query=SELECT 1
spring.datasource.druid.slave.validation-query-timeout=30000
#是否在获得连接后检测其可用性
spring.datasource.druid.slave.test-on-borrow=false
#是否在连接放回连接池后检测其可用性
spring.datasource.druid.slave.test-on-return=false
#是否在连接空闲一段时间后检测其可用性
spring.datasource.druid.slave.test-while-idle=true
spring.datasource.druid.slave.stat-view-servlet.login-username=admin
spring.datasource.druid.slave.stat-view-servlet.login-password=admin
spring.datasource.druid.slave.stat-view-servlet.url-pattern=/druid/*
yml配置
注意事项(无连接池情况下):
在1.0 配置数据源的过程中主要是写成:spring.datasource.url 和spring.datasource.driverClassName。
而在2.0升级之后需要变更成:spring.datasource.jdbc-url和spring.datasource.driver-class-name!不然在连接数据库时可能会报下面的错误:另外在在2.0.2+版本后需要在datasource后面加上hikari,如果你没有加的话,同样可能会报错。
datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: oracle.jdbc.driver.oracledriverdruid:# 主库数据源master:url: jdbc:oracle:thin:@localhost:1521/orcl
#jdbc:mysql://localhost:3306/saas_master?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&pinGlobalTxToPhysicalConnection=trueusername: password:# 从库数据源slave:# 从数据源开关/默认关闭open: truetype: com.alibaba.druid.pool.DruidDataSourcedriverClassName:com.microsoft.sqlserver.jdbc.SQLServerDriverurl: username: rootpassword:durid:initial-size: 1max-active: 20min-idle: 1max-wait: 60000
3 代码配置
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/** @description :主数据源*/
@Configuration
@MapperScan(basePackages = {"dao层目录", "dao层目录"}, sqlSessionFactoryRef = "masterSqlSessionFactory")public class MasterDataSourceConfiguration {@Bean(name = "masterDataSource")@Primary@ConfigurationProperties(prefix = "spring.datasource.druid.master")public DataSource dataSource() {return new DruidDataSource();}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(resolveMapperLocations());//处理mybatis查询字段值为null时字段无法返回Objects.requireNonNull(bean.getObject()).getConfiguration().setCallSettersOnNulls(true);return bean.getObject();}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "masterSqlSessionTemplate")@Primarypublic SqlSessionTemplate sqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}/*** @description :配置多个路径* @return: org.springframework.core.io.Resource[]**/public Resource[] resolveMapperLocations() {ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();List<String> mapperLocations = new ArrayList<>();mapperLocations.add("classpath*:newMapper/*.xml");mapperLocations.add("classpath*:mapper/*.xml");List<Resource> resources = new ArrayList<>();mapperLocations.parallelStream().forEach(mapperLocation ->{ try {Resource[] mappers = resourceResolver.getResources(mapperLocation);resources.addAll(Arrays.asList(mappers));} catch (IOException e) {e.printStackTrace();}});return resources.toArray(new Resource[0]);}
}
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/***@description :从数据源*/@Configuration
@MapperScan(basePackages = "dao层目录", sqlSessionTemplateRef = "slaveSqlSessionTemplate")public class SlaverDataSourceConfiguration {@Bean(name = "slaveDataSource")@ConfigurationProperties(prefix = "spring.datasource.druid.slave")public DataSource dataSource() {return new DruidDataSource();}@Bean(name = "slaveSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:sqlServerMapper/*.xml"));return bean.getObject();}@Bean(name = "slaveTransactionManager")public DataSourceTransactionManager transactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "slaveSqlSessionTemplate")public SqlSessionTemplate sqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory)throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}
关于上面的配置类主要有下面这几点:
1、@MapperScan 注解中我们声明了使用主数据库的dao类所在的位置,还声明了 SqlSessionTemplate 。SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用。
2、我们要声明使用数据,直接在 dao 层的类上加上这样一个注释即可:@Qualifier(“masterSqlSessionFactory”),
其中masterSqlSessionFactory 为配置的sqlSessionTemplateRef 值
3、我们在主数据库配置类的每个方法前加上了 @Primary 注解来声明这个数据库时优先使用(默认)数据库,不然可能会报错。
注:其他controller层 service层正常使用,该配置作用于dao层
springBoot 双数据源配置 (Oracle+ SQL sever)主数据源配置setMapperLocations多个路径相关推荐
- oracle12设配置,Oracle 12C静默安装与配置
Oracle 12C已经发布...下面我将跟大家一起学习静默安装与配置Oracle 12C以及示例用户. 从链接地址获取Oracle 12C安装包与示例用户安装包. 2. 静默安装数据库软件 2.1浏 ...
- oracle rac dns 配置,oracle 11gR2 rac scan ip 配置(DNS模式)
oracle 11gR2 rac scan ip 配置(DNS模式) oracle 11gR2 grid的集群,scan ip 采用的是DNS模式,安装完成后 状态如下: [grid@rac1 bin ...
- Oracle -> DG主备配置
文章目录 1. 介绍主库是归档模式 2.安装前准备工作 3. 主库配置 4. 从库配置 5. DG操作 6. 完成 7. 测试 8. 设置开机启动 1. 介绍主库是归档模式 Oracle中有2种日志, ...
- sql字符串截取oracle,SQL Sever和Oracle截取字符串分析
不同的数据库下截取字符串的方法函数是不同的,在sql server下用的是substring(expression, start, length),Oracle下用的是substr(expressio ...
- 华三防火墙h3cf100配置双宽带_华三防火墙主备配置 h3c f100防火墙配置教程
怎么进入H3C的防火墙配置? 使用discur命令查看当前配置 1.首先进入H3C防火墙界面,然后进入web将界面改为两层模式.2将二层模式的接口转移到信任安全域.三.单击界面左侧快捷菜单栏中的防火墙 ...
- win7oracle安装配置,Oracle:win7系统下安装/配置/卸载Oracle10g
Oracle 安拆 1 Oracle完齐卸载删除步骤: 1.1 开端->设置->把握面板->管理对象->办事,遏制一切Oracle办事. 1.2 开端->法式->O ...
- 配置oracle用户ssh对等性,配置SSH的对等性
在所有节点配置SSH的对等性 在安装Oracle Real Application clusters之前,必须先配置所有节点的SSH对等性.因为在安装过程种Oracle Universal Insta ...
- centos配置oracle自启,centos 下配置oracle11gR2开机自启
这里使用的环境是 CentOS 6.6 ,并且已经装好了oracle11gR2 oracle启动分为两个步骤: 1.启动监听 2.启动服务 1.root 用户下修改ORATAB(将N该为Y): [ro ...
- VS2019程序打包(带sql sever转access数据库)
因为自己在打包的时候根据网上的操作却并没有实现带数据库的操作,偶然看到有人说用accesss属于小型数据库系统,更容易打包,经过尝试之后确实也成功了,今天便将自己的打包过程分享给大家. 因为自己刚开始 ...
最新文章
- 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)
- uni-app如何取消pages页面的默认返回按钮【autoBackButton属性】
- 年终总结 | 2021红包点赞?(文末有刺激的福利哦)
- CSharp之界面美化
- .Net Core开发日志——Peachpie
- 【转载】linux环境下tcpdump源代码分析
- 数据结构与算法--递归(Recursion Algorithm)
- Python3之requests模块
- elasticsearch映射相关字段定义,属性定义,及动态映射(marvel插件方式)mapping
- 使用Excel公式,获取 当前 Excel 的Sheet页 的 名字
- Nginx防盗链、访问控制、解析php相关配置、Nginx代理
- 当前电子计算机发展的局限性,工程测量技术发展现状与趋势
- Unity-MD5加密
- 一键批量PDF转换成图片文件
- FFmpeg 音视频截取
- NavMesh.AllAreas
- 无线蜂窝通信模组是什么?
- 搜索FTP服务器上的文件
- FastReport安装方法精要
- 内核该怎么学?Linux进程管理工作原理(代码演示)