在springBoot框架下使用druid+myBatisPlus實現多數據源(不同模塊不同數據源)


1.idea新建多模塊springBoot項目

父項目使用maven的方式創建

 

 創建完成 刪掉src目錄

 

 新增子模塊使用springBoot initializer插件創建

 

 

 

 

 

 

 

 按以上步驟再建module2 和 main

 

2.配置項目

 因為父項目用的是maven方式 所以自己修改父項目pom文件 增加druid、mybatisPlus等依賴和module標簽 以下是修改后的parent 的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>cn.gch</groupId>
    <artifactId>druid-parent</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>druid-parent</name>

    <modules>
        <module>druid-main</module>
        <module>druid-module1</module>
        <module>druid-module2</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- mybatis-plus begin -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!-- mybatis-plus end -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>


</project>

子模塊繼承父模塊並引入子模塊 這里例出main模塊的pom

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.gch</groupId>
        <artifactId>druid-parent</artifactId>
        <version>1.0</version>
    </parent>
    <groupId>com.gch</groupId>
    <artifactId>druid-main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>druid-main</name>
    <packaging>jar</packaging>
    <description>druid-main</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.gch</groupId>
            <artifactId>druid-module1</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.gch</groupId>
            <artifactId>druid-module2</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.在main模塊 resource包下創建application.yml

#JDBC基本配置
server:
  port: 8088
spring:
  datasource:
    druid:
      #數據源1
      datasource1:
        url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
        username: root
        password: 123
        driverClassName: com.mysql.cj.jdbc.Driver
      #數據源2
      datasource2:
        #MyISAM和InnoDB是兩種最常用的數據庫引擎,默認的引擎是MyISAM,性能最好,但不支持事務處理,只有InnoDB支持事務
        url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
        username: root
        password: 123
        driverClassName: com.mysql.cj.jdbc.Driver
      #連接池配置
      initial-size: 5
      max-active: 100
      min-idle: 5
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      validation-query: SELECT 1 FROM DUAL
      validation-query-timeout: 60000
      test-on-borrow: false
      test-on-return: false
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 100000
      ###監控配置 begin###
      web-stat-filter:
        # WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
      stat-view-servlet:
        # StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置
        enabled: true
        url-pattern: "/druid/*"
        reset-enable: false
        login-username: admin
        login-password: 123456
        allow: 127.0.0.1
      ###監控配置 end###
      filter:
      # 配置StatFilter
        stat:
          db-type: mysql
          log-slow-sql: true
          slow-sql-millis: 5000
        # 配置WallFilter
        wall:
          enabled: true
          db-type: mysql
          config:
            delete-allow: false
            drop-table-allow: false

globalConfig1:
    #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";
  idType: 0
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
  fieldStrategy: 2
    #駝峰下划線轉換
  dbColumnUnderline: true
    #刷新mapper 調試神器
  refreshMapper: true

globalConfig2:
    #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";
  idType: 3
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
  fieldStrategy: 2
    #駝峰下划線轉換
  dbColumnUnderline: true
    #刷新mapper 調試神器
  refreshMapper: true


mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:/com/gch/**/*Mapper.xml

3.實現邏輯

在module1新增config、entity、mapper、web包 目錄結構如下

 

 

 

 

 這里主要貼一下多數據源的配置

package com.gch.druidmodule1.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * Created by Administrator on 2018/1/15.
 */
@Configuration
@MapperScan(basePackages = "com.gch.mainmodule.mapper",sqlSessionTemplateRef = "SqlSessionTemplateOne")
public class DataSourceOneConfig {

    @ConfigurationProperties(prefix = "spring.datasource.druid.datasource1")
    @Bean(name = "datasource1")
    @Primary
    public DataSource dataSource1() throws SQLException {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "sessionFactory1")
    @Primary
    public SqlSessionFactory sqlSessionFactory1(@Qualifier(value = "datasource1") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "transactionManager1")
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManager1(@Qualifier("datasource1") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "SqlSessionTemplateOne")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

module2同理,這里注意一下注解@Primary只能在一個配置文件配置

package com.gch.druidmodule2.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * Created by Administrator on 2028/2/25.
 */
@Configuration
@MapperScan(basePackages = "com.gch.testmodule1.mapper",sqlSessionTemplateRef = "SqlSessionTemplateTow")
public class DataSourceTowConfig {

    @ConfigurationProperties(prefix = "spring.datasource.druid.datasource2")
    @Bean(name = "datasource2")
    public DataSource dataSource2() throws SQLException {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "sessionFactory2")
    public SqlSessionFactory sqlSessionFactory2(@Qualifier(value = "datasource2") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager dataSourceTransactionManager2(@Qualifier("datasource2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "SqlSessionTemplateTow")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

 4.測試效果

打包啟動main模塊  建議使用idea插件Maven Helper編譯

 

 訪問rest接口

 

 

 

每個模塊也可以單獨啟動

 

 在這里注意在main模塊的啟動方法上需要掃描其他模塊的包,不然項目是沒法啟動的

package com.gch.druidmain;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@SpringBootApplication(scanBasePackages = {"com.gch.druidmain", "com.gch.druidmodule1", "com.gch.druidmodule2"})
public class DruidMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(DruidMainApplication.class, args);
    }

}

 

 5.貼上源碼地址

https://github.com/guanxiaohe2017/springBoot-druid-mybatisPlus

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM