springboot多数据源
来源:互联网 发布:js windows.onload 编辑:程序博客网 时间:2024/05/22 04:50
在开发中多数情况下都会用到好多的数据源在springboot中配置多数据源
文件目录
俩个数据源分开配置
UserDbProperties
package com.megvii.springbootmybatismutildatasource.dbsource;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource;import lombok.Data;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.jdbc.datasource.DataSourceTransactionManager;/** * @Auther: chenqingyang * @Description */@Configuration//扫描Mapper 接口并管理容器@MapperScan(basePackages = UserDbProperties.PACKAGE, sqlSessionFactoryRef = "userSqlSessionFactory")public @Dataclass UserDbProperties { Logger logger = LoggerFactory.getLogger( UserDbProperties.class ); static final String PACKAGE = "com.megvii.springbootmybatismutildatasource.mapper.usermapper"; @Value("${userDb.url}") private String url; @Value("${userDb.user}") private String user; @Value("${userDb.password}") private String password; @Value("${userDb.driverClass}") private String driverClass; /** * 定义数据源 */ @Primary @Bean(name = "userDbSource") public DataSource userDbSource() { DruidDataSource dataSource = new DruidDataSource(); logger.info( "UserDBSource driverClass is ({})", driverClass ); dataSource.setDriverClassName( driverClass ); logger.info( "UserDBSource url is ({})", url ); dataSource.setUrl( url ); logger.info( "UserDBSource user is ({})", user ); dataSource.setUsername( user ); logger.info( "UserDBSource password is ({})", password ); dataSource.setPassword( password ); logger.info( "Link to database userDbSource,({},{},{},{})", driverClass, url, user, password ); return dataSource; } /** * 事务管理器 */ @Primary @Bean(name = "userTransactionManager") public DataSourceTransactionManager userTransactionManager() { return new DataSourceTransactionManager( userDbSource() ); } /** * 创建工厂 */ /** * @param userDbSource 数据源 * @return 工厂 */ @Primary @Bean(name = "userSqlSessionFactory") public SqlSessionFactory fileSqlSessionFactory( @Qualifier("userDbSource") DataSource userDbSource) throws Exception { final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource( userDbSource ); return sqlSessionFactoryBean.getObject(); }}
其中我们特别需要注意其中几个地方
@Data lombok (有兴趣的可以看一下)
@primary 重中之中 必须要有的注解 在其中的一个数据源中有就行 它可以解决我们俩个数据源不知道用哪个的问题 没有这个注解会报错
FileDbProperties
package com.megvii.springbootmybatismutildatasource.dbsource;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource;import lombok.Data;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jdbc.datasource.DataSourceTransactionManager;/** * @Auther: chenqingyang * @Description */@Configuration//扫描Mapper 接口并管理容器@MapperScan(basePackages = FileDbProperties.PACKAGE, sqlSessionFactoryRef = "fileSqlSessionFactory")public @Data class FileDbProperties { /** * 精确到确切的mapper目录,以便跟其他数据源隔离 */ static final String PACKAGE = "com.megvii.springbootmybatismutildatasource.mapper.filemapper"; Logger logger = LoggerFactory.getLogger( FileDbProperties.class ); @Value("${fileDb.url}") private String url; @Value("${fileDb.user}") private String user; @Value("${fileDb.password}") private String password; @Value("${fileDb.driverClass}") private String driverClass; /** * 定义数据源 */ @Bean(name = "fileDbSource") public DataSource fileDbSource() { DruidDataSource dataSource = new DruidDataSource(); logger.info( "fileDBSource driverClass is ({})", driverClass ); dataSource.setDriverClassName( driverClass ); logger.info( "fileDBSource url is ({})", url ); dataSource.setUrl( url ); logger.info( "fileDBSource user is ({})", user ); dataSource.setUsername( user ); logger.info( "fileDBSource password is ({})", password ); dataSource.setPassword( password ); logger.info( "Link to database fileDbSource,({},{},{},{})", driverClass, url, user, password ); return dataSource; } /** * 事务管理器 */ @Bean(name = "fileTransactionManager") public DataSourceTransactionManager fileTransactionManager() { return new DataSourceTransactionManager( fileDbSource() ); } /** * 创建工厂 */ /** * @param fileDbSource 数据源 * @return 工厂 */ @Bean(name = "fileSqlSessionFactory") public SqlSessionFactory fileSqlSessionFactory( @Qualifier("fileDbSource") DataSource fileDbSource) throws Exception { final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource( fileDbSource ); return sqlSessionFactoryBean.getObject(); }}
使用的时候因为我们指定了每个数据源支持的mapper,所以使用的时候直接写mapper就行了
源码地址:https://github.com/qyngchen/springbootmutil
阅读全文
0 0
- springboot 多数据源
- springboot多数据源
- springboot 配置多数据源
- springboot 配置多数据源
- SpringBoot-SpringData-多数据源
- springboot 多数据源配置
- springboot + mybatis + 多数据源
- SpringBoot+Mybatis多数据源
- springboot + mybatis + 多数据源
- springboot 多数据源问题
- Springboot 多数据源配置
- SpringBoot配置多数据源
- SpringBoot集成多数据源
- Springboot+jpa多数据源
- springboot 获取多数据源
- springboot的多数据源配置
- SpringBoot、MyBatis配置多数据源
- springboot下配置多数据源
- HBase 在HDFS 上的目录树
- Vue框架(二)
- 23种设计模式之创建模式....(java实现)
- nf_conntrack_max 参数测试与排查
- Python监听鼠标和键盘
- springboot多数据源
- banner图与底下的div之间存在一条缝隙的解决办法
- Python3.6 模块安装记录
- APUE-3.2创建一个具有空洞的文件
- Docker学习笔记:容器数据管理,链接容器,构建私有库
- Mybatis使用generator自动生成mapper文件
- 到计时 带动画
- 10月30号抑郁苦闷不努力的回忆
- Gradle for Android(五)——构建变体