Spring Boot 2.0+Mybatis+Mybatis Generator+IDEA作成多データソース


Spring Boot 2.0+Mybatis+Mybatis Generator+マルチデータソース+IDEA
突っ込みを入れる
昨日はネットで「完璧」版のSpringBoot 2.0+Mybatisを使って多データソースを実現しましたが、実は一部のコードが欠けていました。被害は甚大で、時間がかかりすぎました。
開発環境、技術スタック
IDEAを使って、次の機能点を集めました。Spring Boot 2.0+Mybatis Generator+XMLはXMLの形式でデータベースとインタラクションします。注釈を使う方式ではなく、プロジェクトの後で複雑なSQL文に出会うのはまだXMLの形です。
プロジェクト作成手順
  • IDEAを使ってSpring Boot 2.0プロジェクトを作成する過程は
  • を省略しました。
  • pom.xmlの全コード:
    
    
        4.0.0
        
            org.springframework.boot
            spring-boot-starter-parent
            2.1.8.RELEASE
             
        
        com.xdf
        multd
        0.0.1-SNAPSHOT
        multd
        Demo project for Spring Boot
    
        
            1.8
        
    
        
            
                org.springframework.boot
                spring-boot-starter-data-jdbc
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                2.1.0
            
    
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                mysql
                mysql-connector-java
                runtime
            
            
                org.springframework.boot
                spring-boot-configuration-processor
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
    
                
                    org.mybatis.generator
                    mybatis-generator-maven-plugin
                    
                        true
                        true
                    
                
    
    
            
        
    
    
    
  • プロジェクトの構造を説明します。もともとは各パッケージ、ファイルの役割を図に表示したいです。見すぎです。やはり文字の表現です。コントローラ類、comp.xdf.multid.dao.test 1とcomp.xdf.multid.dao.test 2はそれぞれ2つのデータベースに対応するdao類を保存して、comp.xdf.multic.datasourceは2つのデータベースに対応するデータベース接続を保存して、2つのデータベーステーブルに対応するORM類をcomultic.vidmultimultic.multimultimultimultimultic.multimultic.multic.multic.multimultic.multimultic.multimultiresourceディレクトリのファイルについて説明します。mapperはMybatis Generatorが生成したmapperファイルの保存場所です。生成後に対応するmappers.test 1またはmappers.test 2にコピーします。以下の3つのファイルのapperation.yml、appration-dev.yml、appration-multinersは多環境構成パラメータです。mybatis-config.xmlはORMをマッピングする時のデータタイプの対応関係で、最後のmysql-connector-java-51.34 jarはMybatis Generatorデータベースをリンクする時に使う駆動です。
  • appration.ymlの全コード:
    spring:
      profiles:
        active: mult
    appration-mult.ymlの全コード:
    server:
      port: 8083
    
    # mybatis generator    
    mybatis:
      config-location: classpath:mybatis-config.xml
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.xdf.multd.model
    
    
    spring:
      datasource:
        test1:
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://localhost:3306/femis?userUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
          username: root
          password: chanchaw
        test2:
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://localhost:3306/femisimg?userUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
          username: root
          password: chanchaw
  • mybatis-config.xmlの全コード:
    
    
    
        
            
            
            
            
            
            
            
            
            
            
            
            
        
        
            
            
            
            
            
            
        
    
    
    generatoConfig.xmlの全コード:
    
    
    
    
    
        
        
        
    
        
        
    
            
            
    
            
            
    
            
            
            
    
            
            
    
            
            
            
            
    
            
            
                
                 
            
    
            
            
                            
                            
            
    
            
            
                
                
            
    
            
            
                
                
                
                
            
    
            
            
                
            
    
            
            
                
            
    
            
            
            
  • は、2つのデータベースに対応するデータソースを作成し、2つのファイルは、comp.xdf.multi.datasourceの下に置かれています。ここで、DataSource 1 Configペアのすべてのコードは以下の通りです。
    package com.xdf.multd.datasource;
    
    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.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.xdf.multd.dao.test1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")
    public class DataSource1Config {
    
        @Bean(name = "test1DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.test1")
        @Primary
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "test1SqlSessionFactory")
        @Primary
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            //  XML  
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
                bean.setMapperLocations(resolver.getResources("classpath*:mappers/test1/*.xml"));
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
    
        }
    
        @Bean(name = "test1TransactionManager")
        @Primary
        public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "test1SqlSessionTemplate")
        @Primary
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    }
    
    DataSource 2 figのすべてのコードは以下の通りです。
  • 残りの仕事は、Mybatis Generatorを使ってORMクラスを生成し、対応するディレクトリにコピーして、自分でサービスクラスとコントローラを手動で作成して、
  • をテストすることです。