SpringBoot项目多数据源配置
在实际开发过程中,项目往往会同时用到多个数据源,访问不同的数据库的情况,在SpringBoot项目中可以参考以下配置。
1.application.yml中的配置
spring:
datasource:
szy:
type: com.zaxxer.hikari.HikariDataSource
username: ****
password: *****
jdbc-url: jdbc:dm://localhost:5240/TEST?useUnicode=true&characterEncoding=gbk&useSSL=true&serverTimezone=UTC
driver-class-name: dm.jdbc.driver.DmDriver
hikari:
maximum-pool-size: 20
sms:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://localhost:1430;DatabaseName=TEST
username: ***
password: *****
在application.yml中给每个数据源都配置一个别名,如上面代码中的 szy 和 sms 加以区分。不同数据库的驱动jar包就自己去下载了。
2.在项目中添加两个config的配置类,作为数据源配置。如图所示:
参考代码如下:
package com.cq.duty.config;
import org.apache.ibatis.session.LocalCacheScope;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* @Author: admin
* @Despriction:
* @Package: com.cq.duty.config
* @Date:Created in 2021/1/21 16:53
* @Modify By:
*/
@Configuration
//表示dao层文件应从哪里进行读取
@MapperScan(basePackages = {"com.cq.duty.mapper","com.cq.base.mapper"}, sqlSessionFactoryRef = "szySqlSessionFactory")
public class SzyDruidConfig {
@Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)
@Bean("szyDataSource")
@ConfigurationProperties(prefix = "spring.datasource.szy") //读取application.yml中的配置参数映射成为一个对象
public DataSource getDbDataSource(){
return DataSourceBuilder.create().build();
}
@Primary
@Bean("szySqlSessionFactory")
public SqlSessionFactory dbSqlSessionFactory(@Qualifier("szyDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setCacheEnabled(false);//取消mybatis缓存
configuration.setLocalCacheScope(LocalCacheScope.STATEMENT);
bean.setConfiguration(configuration);//将修改后的configuration从新赋值
// mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致)
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/**.xml"));//表示dao层对应的xml文件的扫描读取路径
return bean.getObject();
}
@Primary
@Bean("szySqlSessionTemplate")
public SqlSessionTemplate dbSqlSessionTemplate(@Qualifier("szySqlSessionFactory")
SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package com.cq.duty.config;
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.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* @Author: admin
* @Despriction:
* @Package: com.cq.duty.config
* @Date:Created in 2021/1/21 17:06
* @Modify By:
*/
@Configuration
//表示dao层文件应从哪里进行读取
@MapperScan(basePackages = "com.cq.duty.smsdao", sqlSessionFactoryRef = "smsSqlSessionFactory")
public class SmsDruidConfig {
@Bean("smsDataSource")
@ConfigurationProperties(prefix = "spring.datasource.sms")
public DataSource getDbDataSource(){
return DataSourceBuilder.create().build();
}
@Bean("smsSqlSessionFactory")
public SqlSessionFactory dbSqlSessionFactory(@Qualifier("smsDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/smsMapper/*.xml"));
return bean.getObject();
}
@Bean("smsSqlSessionTemplate")
public SqlSessionTemplate dbSqlSessionTemplate(@Qualifier("smsSqlSessionFactory")
SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
如代码中的注释锁描述的那样,有三个地方应也别注意
一是@MapperScan中配置的dao层扫描路径,多个数据源则应该配置多个dao层,不能放在同一个目录下。
二是在SqlSessionFactory 中的 bean.setMapperLocations 中配置dao层所对应的xml文件的扫描路径,多个数据源对应的此处路径也是不一致的。
三是通过以上配置之后在yml中关于mybatis的配置和在启动类上的@MapperScan的配置可能会失效不再起作用。
如此之后则完成了多数据源的配置。
项目多数据源完整配置路径参考如下图:
https://blog.csdn.net/Ai_Ting_Java/article/details/113246280
相关信息
- springboot+多数据源配置
- spring的jdbcTemplate的多数据源的配置,springboot的jdbcTemplate的多数据源的配置
- spring多数据源配置
- MyBatis 配置多数据源
- 三、Spring Boot 多数据源配置
- springBoot专题3---->springBoot与多数据源的配置
- spring 配置多数据源 springmvc/springboot
- 手把手教你用springboot配置多数据源
- 基于springBoot项目如何配置多数据源
- SpringBoot ( 七 ) :springboot + mybatis 多数据源最简解决方案
- SpringBoot 配置多数据源
- Springboot + Mybatis 多数据源配置
- Tomcat7配置数据源
- SpringBoot配置MongoDB多数剧源
- SpringBoot 的 MyBatis 多数据源配置
- springboot之jpa多数据源
- SpringBoot配置mybatis多数据源(包含单数据源)最终解决方案,带源码
- springmvc+mybatis多数据源配置,AOP注解动态切换数据源
- SpringBoot2.0 基础案例(06):引入JdbcTemplate,和多数据源配置
- Github 上 10 个值得学习的 Springboot 开源项目
- Spring+Mybatis 多数据源配置——静态数据源配置
- springboot多数据源的配置与使用
- springboot配置多个数据源
- Spring Boot之JdbcTemplate多数据源配置与使用
- 如何构建多模块的SpringBoot项目
- 项目数据
- Maven项目settings.xml的配置
- SpringBoot数据源相关配置
- springboot+mybatis 双数据源配置
- 基于xml的Spring多数据源配置和使用
- Springboot 多数据源配置,结合tk-mybatis
- springboot多配置环境
- EJB 配置多个数据源
- 基于注解的Spring多数据源配置和使用
- 第二十四章:SpringBoot项目整合JPA多数据源配置
- springboot系列十、springboot整合redis、多redis数据源配置
- SSM配置多数据源
- SpringBoot配置属性转载地址
- 开源项目 —— 中国行政区划数据
- Jndi配置数据源
- 【SpringBoot】SpringBoot 配置JDBC数据源(十二)
- spring mybatis 多个数据源配置
- spring多个数据源配置
- SpringBoot读取properties文件配置项
- 配置SpringMvc + maven 数据源!(四)
- SpringMVC+Mybatis 如何配置多个数据源并切换?
- springboot配置多环境
- tp初始之配置项
- SpringBoot项目集成Mybatis Plus(一)多数据源配置
- 【Java】maven多项目资源共享
热门资讯
推荐资讯
最新资讯
- 每个程序员必学的10个Git命令
- Android开发之蓝牙详解(一)
- Android开发之蓝牙详解(三)
- 防止SQL注入的五种方法
- 5种方法防止 jsp被sql注入
- 【译】在React中实现条件渲染的7种方法
- winform防止界面卡死的三种方法 总结:使用委托 + 线程的方法实现 参考:https://blog.csdn.net/handsomexiaominge/article/details/4265...
- Android WifiManager.WifiLock 简介
- [译]Android内存泄漏的八种可能(上)
- python+appnium【第一章-环境搭建】
- 第一章:tornado入门环境搭建
- unittest框架核心要素及应用
- 黑马程序员前端-CSS用户界面样式源码
- 传智健康项目day01
- 传智健康项目day02
- 传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
- 黑马传智健康项目讲义第一章之ElementUI
- 黑马传智健康项目讲义第一章 之Power Designer
- 黑马传智健康项目讲义第一章之项目概述
- MYSQL的master/slave数据同步配置 ZT
评论