SpringBoot + mybatis + druid 配置两个数据源

Posted 秃头谷雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot + mybatis + druid 配置两个数据源相关的知识,希望对你有一定的参考价值。

SpringBoot + mybatis + druid 配置两个数据源

目录

文章目录 

前言

一、SpringBoot + mybatis + druid 配置两个数据源?

二、使用步骤

1.YML文件的配置

2.Mybatis-config的配置

3.从数据源的配置

4.pom文件

 

总结



提示:以下是本篇文章正文内容,下面案例可供参考

一、SpringBoot + mybatis + druid 配置两个数据源?

工作中少不了与数据库打交道 在工作中应该怎么去配置两个数据源呢?

二、使用步骤

1.YML文件的配置

代码如下(示例):

spring:
  datasource:
    db1:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: oracle.jdbc.OracleDriver
      url: 
      username: 
      password:
    db2:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: dm.jdbc.driver.DmDriver
      url: 注意url不要写成jdbc-url 会报URL找不到
      username: 
      password:
mybatis:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath:mapper/AMapper/*.xml -> xml文件地址一定要写对 

 

2.Mybatis-config的配置

粘贴到resourcces就可以用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="callSettersOnNulls" value="true"/>
        
        <setting name="cacheEnabled" value="true"/>
        
        <setting name="lazyLoadingEnabled" value="false"/>
        
        <setting name="aggressiveLazyLoading" value="true"/>
        
        <setting name="multipleResultSetsEnabled" value="true"/>
        
        <setting name="useColumnLabel" value="true"/>
        
        <setting name="useGeneratedKeys" value="false"/>
        
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        
        <setting name="defaultExecutorType" value="SIMPLE"/>
        
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        
        <setting name="localCacheScope" value="SESSION"/>
        
        <setting name="jdbcTypeForNull" value="NULL"/>
        
    </settings>
 
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
    
</configuration>

3.从数据源的配置

@Configuration //注解到spring容器中
@MapperScan(basePackages = "com.et.xxx",sqlSessionTemplateRef = "db2SqlSessionTemplate") //这地方改成自己的Mapper
public class DataSourceDM {


    @Bean
    //引入YML配置
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource db2DataSource() {
        //很多文章返回的dataSource 这里需要返回德鲁伊连接池 否则会报一些奇怪的错误
        return new DruidDataSource();
    }

    @Bean
    public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);                                                //不要忘记改
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/xxx/*.xml"));

        //这一段是开启驼峰转换~~~~~~~~~~~~
        SqlSessionFactory sqlSessionFactory = bean.getObject();
        org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }

    @Bean
    public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

主数据源一毛一样 复制下来再写一遍 db2改成db1 @Bean下面加一个@Primary 来表明主数据源 还有需要改的地方千万别忘记

 

4.pom文件

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.4</version>
</dependency>
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.12</version>
</dependency>
<dependency>
   <groupId>com.oracle.database.jdbc</groupId>
   <artifactId>ojdbc8</artifactId>
   <scope>runtime</scope>
</dependency>
<!-- DruidDataSourceBuilder类构建实例 -->
<dependency>
          <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.4</version>
</dependency>
<dependency>
   <groupId>com.dm7</groupId>
   <artifactId>Dm7JdbcDriver17</artifactId>
   <version>1.0</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/lib/Dm7JdbcDriver17.jar</systemPath>
</dependency>

我用的Oracle和DM数据库 看看自己数据库改一改

 


总结

还有就是一些该死的坑
报错 什么[H2 URL] 启动类
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

如果 报ibatis的错看看自己的mapper xml 和 mapper接口的路径 对不对

如果报The Network Adapter could not establish the connection 快去看看自己的url username password是不是写错了

剩下的没啥了 报错不要急 一点一点排查

以上是关于SpringBoot + mybatis + druid 配置两个数据源的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 整合其他框架 -- SpringBoot整合Mybatis

springboot.springboot用最简单的方式整合mybatis

yml的mybatis的sql查看;Mybatis+Springboot 控制台查看日志,Mybatis结合springboot打印日志

企业分布式微服务云SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

SpringBoot.04.SpringBoot整合MyBatis

SpringBoot.04.SpringBoot整合MyBatis