Springboot は mybatis+mysql/impala を統合してデュアル データ ソースを実現します

最近、ビッグデータ サーバー プロジェクトの開発では、SpringBoot フレームワークが、Impala クエリ ツールを介して Hadoop の HDFS データ ソースを直接クエリする必要があり、同時に、ビッグ データ集約の mysql データもクエリする必要があり、デュアル データ ソースを実装します。

そこで調べた結果、springboot フレームワークの下で、Impala クエリ ツールを Java 言語で接続して、データ ウェアハウスのデータ クエリを実現しました。

プロセス全体は 2 つの部分に分かれています。最初の部分は、springboot が mybatis と impala を統合することです。後編、mysqlとimpalaのデュアルデータソースを実現

前編: mybatisを統合するspringbootの詳細なプロセスは繰り返さない. 以下の操作はすべてmybatis環境が構築されているという条件の下で行われる.

1. impala ドライバー jar パッケージを導入する.jar パッケージは Maven ウェアハウスにないため、自分でダウンロードする必要がある.ダウンロード アドレス リンク: https://pan.baidu.com/s/1wlLsrDvZliuwL_qGtND7nw?pwd=sivw

抽出コード:sivw

2. ダウンロード後、専用サーバーウェアハウスにプッシュすることをお勧めします. プッシュ方法:

mvn deploy:deploy-file -DgroupId=com.cloudera -DartifactId=impala-jdbc41 -Dversion=2.6.3-SNAPSHOT -Dpackaging=jar -Dfile=F:\Repository\impala\impala-jdbc41\2.6.3\ImpalaJDBC41. jar -Durl=http://xx.xx.xx.xx:8081/repository/maven-snapshots/ -DrepositoryId=snapshots

3. プッシュ完了後、プロジェクトを参照することができます. 参照方法は次のとおりです.

<dependency> 
    <groupId>com.cloudera</groupId> 
    <artifactId>impala-jdbc41</artifactId> 
    <version>2.6.3-SNAPSHOT</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.hive </groupId> 
    <artifactId>hive-jdbc</artifactId> 
    <version>1.2.1</version> 
    <exclusions> 
        <exclusion> 
            <artifactId>slf4j-log4j12</artifactId> 
            <groupId>org.slf4j</groupId> 
        </exclusion> 
        <exclusion> 
            <artifactId>サーブレット-api</artifactId> 
            <groupId>javax.サーブレット</groupId> 
        </除外
        > <除外>
            <artifactId>geronimo-jaspic_1.0_spec</artifactId> 
            <groupId>org.apache.geronimo.specs</groupId> 
        </exclusion> 
        <exclusion> 
            <groupId>org.eclipse.jetty.aggregate</groupId> 
            <artifactId> jetty-all</artifactId> 
        </exclusion> 
    </exclusions> 
</dependency>

上記では、hive-jdbc の jar パッケージの依存関係により、複数の jar パッケージの競合が発生し、jar パッケージの競合によってサービスの開始に失敗するため、jar パッケージの除外が hive の下に追加されます。

4. データ ソースを構成する

spring: 
  application: 
    name: xxxx 
  main: 
    #Multiple FeignClients が値に対応する
    allow-bean-definition-overriding: true 
  cloud: 
    nacos: 
      config: 
        server-addr: xxxxxxxxxx:8848 
        namespace: c00000-c02d-48bb-9e18-a1300000e63 
        group : DEFAULT_GROUP 
        file-extension: yml 
        shared-configs[0]: 
          data-id: xx-xx-common.yml 
          group: DEFAULT_GROUP 
          refresh: true 
  datasource: 
    dynamic: 
      primary: mysqlDataSource # デフォルトのデータ ソースまたはデータ ソース グループを設定、default値は master 
      strict: false #厳密モー​​ドを設定します, デフォルトの false は開始されていません. 開始後, 指定されたデータソースは一致しません
      datasource:
        mysqlDataSource:
          ユーザー名: xxxxx
          パスワード: xxxxx 
          URL: jdbc:mysql://xx.xx.xx.xxx:3306/test?allowMultiQueries=true
          ドライバー クラス名: com.mysql.jdbc.ドライバー
          タイプ: com.alibaba。 druid.pool.DruidDataSource 
        impalaDataSource: 
          url: jdbc:impala://xx.xx.xx.xx:21050/test 
          driver-class-name: com.cloudera.impala.jdbc41.Driver 
          type: com.alibaba.druid.pool .DruidDataSource 
        ########## 接続プールの構成 ########## 
        druid: 
          # 初期化サイズの構成、最小および最大
          initial-size: 5 
          minIdle: 5 
          max-active: 16 
          # 構成接続待ちタイムアウト時間を取得する(単位:ミリ秒)
          max-wait: 60000 
          # 閉じる必要があるアイドル状態の接続を検出するのにかかる時間をミリ秒単位で構成する
          time-before-eviction-runs-millis: 2000 
          # プール内の接続の最小存続時間をミリ秒単位で構成する
          min -evictable-idle-time-millis: 600000 
          max-evictable-idle-time-millis: 900000 
          # 接続が使用可能かどうかをテストするために使用される SQL ステートメント。デフォルト値はデータベースごとに異なります。これは mysql 
          validationQuery: select 1です。 
          # アプリケーションが接続プールからの接続を申請し、testOnBorrow が false の場合、接続プールは接続がアイドル状態かどうかを判断し、アイドル状態の場合は接続が使用可能かどうかを確認します testWhileIdle: true # true の場合、デフォルトは false です、アプリケーションは
          接続
          プールに送信します接続を申請すると、接続プールは接続が使用可能かどうかを判断します
          testOnBorrow: false 
          # true (デフォルト false) の場合、アプリケーションが接続の使用を終了し、接続プールが接続をリサイクルするとき、接続がまだ利用可能かどうかを判断します
          testOnReturn: false 
          # PreparedStatement、つまり PSCache をキャッシュするかどうか。PSCache は、Oracle などのカーソルをサポートするデータベースのパフォーマンスを大幅に向上させます。
          poolPreparedStatements: true 
          # To enable PSCache, it must be configured to be greater than 0. When it is greater than 0, poolPreparedStatements will automatically trigger and changed to true. Druid では、PSCache がメモリを占有しすぎる問題はありません。 Oracle. You can configure this value to be greater. For example, 100 
          maxOpenPreparedStatements: 20 
          maxPoolPreparedStatementPerConnectionSize: 20 
          useGlobalDataSourceStat: true 
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 
          # 接続の最小アイドル数内の接続プールで、アイドル時間が minEvictableIdleTimeMillis を超えると、keepAlive 操作が実行されます
          keepAlive: true

5. 上記の 4 つの手順が完了したら、他の記事で自動生成されたコードを使用してテストを実行できます。

パート 2: 単一データ ソースから impala および mysql デュアル データ ソースへ

1. 動的データ ソース jar パッケージを導入する

<dependency> 
    <groupId>com.baomidou</groupId> 
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId> 
    <version>3.4.0</version> 
</dependency>

2. yml で複数のデータ ソースを構成する

spring: 
  application: 
    name: xx-xx 
  main: 
    #複数の FeignClient が値に対応する
    allow-bean-definition-overriding: true 
  cloud: 
    nacos: 
      config: 
        server-addr: nacos-headless.ms-nacos.svc.cluster.local :8848
        名前空間: c693d7a3-c02d-48bb-9e18-a1331f81fe63
        グループ: DEFAULT_GROUP
        ファイル拡張子: yml
        共有構成 [0]:
          データ ID: xx-xx-xx.yml -------インポートされたパブリック構成
          グループ: DEFAULT_GROUP 
          refresh: true 
  datasource: 
    dynamic: 
      primary: mysqlDataSource #デフォルトのデータ ソースまたはデータ ソース グループを設定します。デフォルト値は master です
      strict: false #厳密モー​​ドを設定, デフォルトは false で起動しません. 起動後、指定されたデータソース 
      datasource:
        mysqlDataSource:
          ユーザー名: xxxx
          パスワード: xxxxxx 
          url: jdbc:mysql://xx.xx.xx.xx:3306/ xx? allowMultiQueries=true
          ドライバークラス名: com.mysql.jdbc.Driver
          タイプ: com.alibaba.druid.pool.DruidDataSource 
        impalaDataSource: 
          url: jdbc:impala://xx.xx.xx.xx:21050/test 
          driver- class-name: com.cloudera.impala.jdbc41.Driver 
          type: com.alibaba.druid.pool.DruidDataSource 
        ########## 接続プール構成 ########## 
        druid : 
          # 初期化サイズ、最小、最大を設定する
          initial-size: 5 
          minIdle: 5 
          max-active: 16 
          # 待機するように構成する接続タイムアウト時間 (単位: ミリ秒) 
          max-wait: 60000 
          # 検出を実行する時間を構成し、閉じる必要があるアイドル接続を検出します (ミリ秒単位) 
          time-before-eviction-runs-millis: 2000 
          # プール内の接続の最小存続時間を構成します。 in milliseconds 
          min-evictable-idle-time-millis: 600000 
          max-evictable-idle-time-millis: 900000 
          # 接続が使用可能かどうかをテストするために使用される SQL ステートメント。デフォルト値はデータベースごとに異なります。これは mysql 
          validationQueryです。 : select 1 
          # アプリケーションが接続プールからの接続を申請し、testOnBorrow が false の場合、接続プールは接続がアイドル状態かどうかを判断し、アイドル状態の場合は接続が使用可能かどうかを確認します testWhileIdle: true # true の場合、デフォルトは false、アプリケーションは
          接続
          プールに送信します 接続を申請すると、接続プールは接続が使用可能かどうかを判断します
          testOnBorrow: false 
          # true の場合 (デフォルトは false)、アプリケーションが接続の使用を終了し、接続プールがリサイクルされる接続、接続がまだ利用可能かどうかを判断します
          testOnReturn: false
          # PSCacheであるpreparedStatementをキャッシュするかどうか。PSCache は、カーソルをサポートするデータベースのパフォーマンスを大幅に向上させます. たとえば、oracle 
          poolPreparedStatements: true 
          # PSCache を有効にするには、0 より大きい値に設定する必要があります. 0 より大きい場合、poolPreparedStatements が自動的にトリガーされ、true に変更されます. Druid では、Oracle の下で PSCache によって
          占有されるメモリ
          はありません。問題
          が多すぎる場合、この値をより大きく設定できます。たとえば、100 true;druid.stat.slowSqlMillis=500 
          # 接続プール接続の minIdle の数以内で、アイドル時間が minEvictableIdleTimeMillis を超えた場合、keepAlive 操作が実行されます
          keepAlive: true

 

3. サービス層は処理のために永続化層を呼び出します

到達不能データ ソースによると、マッパー インターフェース ファイルで使用します。

@DS("impalaDataSource") を使用して、使用するデータ ソースを構成します。注釈が付けられていない場合は、デフォルトのデータ ソースが使用されます。

おすすめ

転載: blog.csdn.net/weixin_48363639/article/details/124350891