springboot複数のデータソースのデモプロジェクト

背景:あなたは複数のデータソースからのデータを照会するため同社は、新しいデータ項目を作成したい、とのプロジェクトは、ノートをビルドする前に、記録を行うには、この時間をしませんでした。箱から出して、おいしい警告!

いくつかの問題に遭遇するプロセスを構築し、我々は、命令をステップインします。コード住所:https://gitee.com/aaron_qc/multi-datasource.git

  1. メインコースの最初の。多段階データ・ソース構成
    1. 依存tkmapper +ドルイド+ mysqlの+春ブート・コンフィギュレーション・プロセッサを導入
      1. <依存> 
            <groupIdを> org.springframework.boot </ groupIdを> 
            <たartifactId>春・ブート・コンフィギュレーション・プロセッサ</たartifactId> 
            <バージョン> 2.1.5.RELEASE </バージョン> 
        </依存関係> 
        
        <! - mysqlのそしてMyBatisの等- > 
        <依存性> 
            <のgroupId> tk.mybatis </のgroupId> 
            <たartifactId>マッパースプリングブートスタータ</たartifactId> 
            <バージョン> 2.1.4 </バージョン> 
        </依存> 
        
        <依存性> 
            <groupIdを> mysqlの</ groupIdを> 
            <たartifactId>のmysql-コネクタ-javaの</たartifactId> 
            <バージョン> 8.0.11 </バージョン> 
        </依存関係> 
        
        <! -ドルイド- >
        <依存性>  
            <groupIdを> com.alibaba </ groupIdを>
            <たartifactId>ドルイドスプリングブートスタータ</たartifactId>
            <バージョン> 1.1.10 </バージョン> 
        </依存関係>
    2. 以下のように設定があります
      1. クラスプラス@EnableConfigurationPropertiesを開始します。
        1. OceanApplication
          / ** 
           * @author 2019年9月16日にQuCheng。
           * EnableConfigurationProperties使@ConfigurationProperties注解的类(需要加@Component)生效。
           * / 
          @EnableConfigurationProperties 
          @SpringBootApplication 
          パブリッククラスOceanApplication { 
              パブリック静的無効メイン(文字列[] args){ 
                  SpringApplication.run(OceanApplication.class、引数)。
              } 
          }
      2. YMLのプロパティを設定します
        1. application.ymlカスタムname属性、およびのみ対応するクラスのJavaに対応
          ドルイド:
            #データソース構成
            ユーザー:ルート
            パスワード:XXXX 
            driverClass:com.mysql.cj.jdbc.Driver 
            #最小最大初期
            INITIALSIZE :. 5 
            minIdle :. 5 
            MAXACTIVEについて:20です
            testOnBorrow:Falseに
            urlIceberg:JDBC:MySQLの://106.12.176.120 ?/氷山serverTimezone = GMT%2B8 &characterEncoding = UTF-8&useSslオプション= falseの#は、タイムゾーンを設定するとき
            urlOceanます。jdbc:mysqlの://106.12.176.120/ocean serverTimezone = GMT%2B8&characterEncoding = UTF-8&useSslオプション= 偽#はタイムゾーンを設定するとき?
            urlAccountます。jdbc:MySQLの:?//106.12.176.120/account serverTimezone = GMT%2B8 &characterEncoding = UTF-8&useSslオプション= falseの#は、タイムゾーンを設定します 
      3. カスタムプロパティ親クラスローディングBaseProperty
        1. マッピングYML構成。 
          パッケージcom.hb.ocean.druid。
          
          輸入com.alibaba.druid.pool.DruidDataSource。
          輸入lombok.Data。
          輸入org.springframework.boot.context.properties.ConfigurationProperties。
          輸入org.springframework.stereotype.Component。
          
          インポートするjavax.sql.DataSource; 
          
          / ** 
           *データソースの基本クラス
           * @author qucheng 
           * / 
          @Data 
          @ConfigurationProperties(接頭辞= "ドルイド")
          @Component 
          クラスBaseProperty { 
          
              保護された文字列ユーザー; 
          
              保護された文字列のパスワード。
          
              保護された文字列driverClass。
          
              保護されたint型INITIALSIZE。
          
              保護されたint型MAXACTIVE。
          
              保護されたint型minIdle。
          
              保護されたブールtestOnBorrow。
          
              保護された文字列urlAccount。
          
              保護された文字列urlOcean。
          
              保護された文字列urlIceberg。
          
          
              データソースcreateDataSource(文字列のURL){ 
                  DruidDataSourceのdataSource =新しいDruidDataSource(); 
                  dataSource.setDriverClassName(driverClass)。
                  dataSource.setUrl(URL); 
                  dataSource.setUsername(ユーザ)。
                  dataSource.setPassword(パスワード); 
                  dataSource.setInitialSize(INITIALSIZE)。
                  dataSource.setMaxActive(MAXACTIVE)。
                  dataSource.setMinIdle(minIdle)。
                  dataSource.setTestOnBorrow(testOnBorrow)。
                  DataSourceを返します。
              } 
          }
      4. それぞれのデータソース構成マップパス(マッパーインターフェース+ xmlファイル)
        1. パス構成 - 2つのその他の構成は、ここでは省略されます
          com.hb.ocean.druidパッケージ; 
          
          インポートorg.apache.ibatis.session.SqlSessionFactory; 
          インポートorg.mybatis.spring.SqlSessionFactoryBean; 
          インポートorg.springframework.beans.factory.annotation.Qualifier; 
          インポートorg.springframework.context.annotation .Bean; 
          インポートorg.springframework.core.io.support.PathMatchingResourcePatternResolver; 
          インポートorg.springframework.jdbc.datasource.DataSourceTransactionManager; 
          インポートorg.springframework.stereotype.Component; 
          インポートtk.mybatis.spring.annotation.MapperScan; 
          
          インポートのjavax。 sql.DataSource; 
          
          / ** 
           *アカウントのDataSource 
           * MapperScanパッケージを結合するための注釈を(テーブル名マッピングエンティティTKを使用する)と注釈を追加することなく、指定したデータソース、および指定されたディレクトリマッパープロセスをスキャン
           * 
           *を@ qucheng著者
           * /
          @Component 
              公衆SqlSessionFactory masterSqlSessionFactory(@Qualifier( "accountDataSource")データソースaccountDataSource)
          @MapperScan(basePackages = "com.hb.ocean.mapper.account"、sqlSessionFactoryRef = "accountSqlSessionFactory")
          パブリッククラスAccountConfigがBaseProperty {延び
          
              @Bean(名= "accountDataSource")
              公衆データソースcreateDataSourceを(){ 
                  (urlAccount)createDataSourceを返します。
              } 
          
              @Bean(名= "accountTransactionManager")
              公衆DataSourceTransactionManager accountTransactionManager(){ 
                  戻り新しいDataSourceTransactionManager(createDataSource())。
              } 
          
              @Bean(名= "accountSqlSessionFactory")は
                      例外{スロー
                  最終SqlSessionFactoryBeanのSessionFactory =新しいSqlSessionFactoryBeanを();
                  sessionFactory.setDataSource(accountDataSource)。
                  文字列mapperLocation = "クラスパス:マッパー/アカウント/ * xmlの"; 
                  sessionFactory.setMapperLocations(新しいPathMatchingResourcePatternResolver()
                          .getResources(mapperLocation)); 
                  sessionFactory.getObjectを返します(); 
              } 
          }
      5. 適切なディレクトリにファイルを作成します。このプロジェクトは、起動時にロードされます。
        1. 構造図。

           

    3. 次のように試験結果の打ち上げ成功後にあり
      1. テストコード
        com.hb.ocean.controllerパッケージ; 
        
        インポートcom.hb.ocean.mapper.account.UserMapper; 
        インポートcom.hb.ocean.mapper.iceberg.ItemOrderMapper; 
        インポートorg.springframework.web.bind.annotation.GetMapping; 
        インポートORG .springframework.web.bind.annotation.RequestMapping; 
        インポートorg.springframework.web.bind.annotation.RestController; 
        
        インポートjavax.annotation.Resourceを; 
        
        / ** 
         。* @author QuCheng 2019年9月17日ON 
         * / 
        @RestController 
        @ (「/ QC」)@RequestMapping 
        パブリッククラスTestViewに{ 
        
            / ** 
             *直接制御層に導入ダオ層を推奨しません。ここだけの使用を証明
             * / 
            @Resource 
            プライベートUserMapper UserMapperを、
            @Resource 
            プライベートItemOrderMapper itemOrderMapper。
        
            ( "/テスト")@GetMapping 
            パブリック文字列試験(){ 
                System.out.printlnは( "用户数:" + userMapper.selectCountUser(NULL、NULL)); 
                System.out.println( "订单数:" + itemOrderMapper.selectCountSuccessOrder(NULL、NULL)); 
                「OK」を返します。
            } 
        }
      2. テスト結果

いくつかの質問には、プロセス上で発生します

  1. 複数のデータソースは、一貫性のないデータ・ソースのURLに加えて、基本的な構成を共有YML。
  2. カスタム構成項目はYMLプロパティを必要とします
    1. 引入春・ブート・コンフィギュレーション・プロセッサ。
    2. クラスは、アノテーションを使用して起動します@EnableConfigurationProperties
    3. 解析クラス3は、便宜上のために上記のコメント@Dataに導入されます。(接頭辞=「ドルイド」)が指定されている@ConfigurationPropertiesプロパティを起動する「ドルイド」読み取ります。コンテナ管理によって表さ@Component
  3. Configurationクラス@MapperScan注釈はtk.mybatis.spring.annotation.MapperScanコメントを使用しています。org.mybatis.spring.annotation.MapperScanも使用することができますが、それは一緒@Table注釈マップで使用することはできません。

上記の方法は、マルチデータソース構成をspringboot。これはデモバージョンです。さらにデータの実用化にも関します

  1. 登録のユーレカの発見。クラスのノートの導入を開始します
  2. インターフェース呼び出しと失敗したヒューズを装います
  3. エレガントでシンプルなプロセスのシャットダウン
  4. 闊歩ドキュメント
  5. Redisの分散トランザクション

 

おすすめ

転載: www.cnblogs.com/nightOfStreet/p/11543768.html