亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot整合多數據源配置的方式是什么

發布時間:2021-12-28 13:17:06 來源:億速云 閱讀:152 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關springboot整合多數據源配置的方式是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

    簡介

    主要介紹兩種整合方式,分別是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。

    一、表結構

    在本地新建兩個數據庫,名稱分別為db1db2,新建一張user表,表結構如下:

    springboot整合多數據源配置的方式是什么

    SQL代碼:

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
      `name` varchar(25) NOT NULL COMMENT '姓名',
      `age` int(2) DEFAULT NULL COMMENT '年齡',
      `sex` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性別:0-男,1-女',
      `addr` varchar(100) DEFAULT NULL COMMENT '地址',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

    二、多數據源整合

    1. springboot+mybatis使用分包方式整合

    1.1 主要依賴包
    • spring-boot-starter-web

    • mybatis-spring-boot-starter

    • mysql-connector-java

    • lombok

    pom.xml 文件如下:

    <?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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>multipledatasource</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>multipledatasource</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
       
        <dependencies>
            <!-- spring 依賴 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
             <!-- mysql 依賴 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.0</version>
            </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>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>

    1.2 application.yml 配置文件

    server:
      port: 8080 # 啟動端口
    spring:
      datasource: 
        db1: # 數據源1
          jdbc-url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        db2: # 數據源2
          jdbc-url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver

    注意事項

    各個版本的 springboot 配置 datasource 時參數有所變化,例如低版本配置數據庫 url 時使用 url 屬性,高版本使用 jdbc-url 屬性,請注意區分。

    1.3 建立連接數據源的配置文件

    第一個配置文件

    @Configuration
    @MapperScan(basePackages = "com.example.multipledatasource.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")
    public class DataSourceConfig1 {
    
        @Primary // 表示這個數據源是默認數據源, 這個注解必須要加,因為不加的話spring將分不清楚那個為主數據源(默認數據源)
        @Bean("db1DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.db1") //讀取application.yml中的配置參數映射成為一個對象
        public DataSource getDb1DataSource(){
            return DataSourceBuilder.create().build();
        }
    
        @Primary
        @Bean("db1SqlSessionFactory")
        public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            // mapper的xml形式文件位置必須要配置,不然將報錯:no statement (這種錯誤也可能是mapper的xml中,namespace與項目的路徑不一致導致)
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db1/*.xml"));
            return bean.getObject();
        }
    
        @Primary
        @Bean("db1SqlSessionTemplate")
        public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    第二個配置文件

    @Configuration
    @MapperScan(basePackages = "com.example.multipledatasource.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
    public class DataSourceConfig2 {
    
        @Bean("db2DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.db2")
        public DataSource getDb1DataSource(){
            return DataSourceBuilder.create().build();
        }
    
        @Bean("db2SqlSessionFactory")
        public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db2/*.xml"));
            return bean.getObject();
        }
    
        @Bean("db2SqlSessionTemplate")
        public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    1.4 具體實現

    項目結構如下:

    springboot整合多數據源配置的方式是什么

    注意事項

    • 在 service 層中根據不同的業務注入不同的 dao 層

    • 如果是主從復制- -讀寫分離:比如 db1 中負責增刪改,db2 中負責查詢。但是需要注意的是負責增刪改的數據庫必須是主庫(master)

    2. springboot+druid+mybatisplus使用注解整合

    2.1 主要依賴包

    • spring-boot-starter-web

    • mybatis-plus-boot-starter

    • dynamic-datasource-spring-boot-starter # 配置動態數據源

    • druid-spring-boot-starter # 阿里的數據庫連接池

    • mysql-connector-java

    • lombok

    pom.xml 文件如下:

    <?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>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.9.RELEASE</version>
           <relativePath/> <!-- lookup parent from repository -->
       </parent>
       <groupId>com.example</groupId>
       <artifactId>mutipledatasource2</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <name>mutipledatasource2</name>
       <description>Demo project for Spring Boot</description>
    
       <properties>
           <java.version>1.8</java.version>
       </properties>
    
       <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
           <dependency>
               <groupId>com.baomidou</groupId>
               <artifactId>mybatis-plus-boot-starter</artifactId>
               <version>3.2.0</version>
           </dependency>
           <dependency>
               <groupId>com.baomidou</groupId>
               <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
               <version>2.5.6</version>
           </dependency>
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <scope>runtime</scope>
           </dependency>
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid-spring-boot-starter</artifactId>
               <version>1.1.20</version>
           </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>
           </dependency>
       </dependencies>
    
       <build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
               </plugin>
           </plugins>
       </build>
    
       <profiles>
           <profile>
               <id>local1</id>
               <properties>
                   <profileActive>local1</profileActive>
               </properties>
               <activation>
                   <activeByDefault>true</activeByDefault>
               </activation>
           </profile>
           <profile>
               <id>local2</id>
               <properties>
                   <profileActive>local2</profileActive>
               </properties>
           </profile>
       </profiles>
    </project>

    2.2 application.yml 配置文件

    server:
      port: 8080
    spring:
      datasource:
        dynamic:
          primary: db1 # 配置默認數據庫
          datasource:
            db1: # 數據源1配置
              url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
              username: root
              password: root
              driver-class-name: com.mysql.cj.jdbc.Driver
            db2: # 數據源2配置
              url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
              username: root
              password: root
              driver-class-name: com.mysql.cj.jdbc.Driver
          durid:
            initial-size: 1
            max-active: 20
            min-idle: 1
            max-wait: 60000
      autoconfigure:
        exclude:  com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置

    DruidDataSourceAutoConfigure會注入一個DataSourceWrapper,其會在原生的spring.datasource下找 url, username, password 等。動態數據源 URL 等配置是在 dynamic 下,因此需要排除,否則會報錯。排除方式有兩種,一種是上述配置文件排除,還有一種可以在項目啟動類排除:

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    public class Application {
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    }

    2.3 給使用非默認數據源添加注解@DS

    @DS 可以注解在方法上和類上,同時存在方法注解優先于類上注解。
    注解在 service 實現或 mapper 接口方法上,不要同時在 service 和 mapper 注解。

    @DS("db2") 
    public interface UserMapper extends BaseMapper<User> {
    }
    
    @Service
    @DS("db2")
    public class ModelServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {}
    
      @Select("SELECT * FROM user")
      @DS("db2")
      List<User> selectAll();

    關于springboot整合多數據源配置的方式是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    板桥市| 巴林右旗| 江阴市| 丘北县| 哈尔滨市| 蒲江县| 健康| 将乐县| 南木林县| 千阳县| 洪湖市| 石渠县| 吴旗县| 合川市| 郁南县| 鹰潭市| 保定市| 石河子市| 阜新| 万安县| 堆龙德庆县| 昭苏县| 治县。| 高清| 鸡东县| 汉中市| 门源| 黑龙江省| 洛川县| 调兵山市| 肇庆市| 铜川市| 西城区| 兴隆县| 搜索| 千阳县| 天水市| 康保县| 手机| 日土县| 沅江市|