Upgrade to Pro — share decks privately, control downloads, hide ads and more …

社内での開発コミュニティ活動 ~バッチ処理方式設計とSpringBootでのバッチ開発~

社内での開発コミュニティ活動 ~バッチ処理方式設計とSpringBootでのバッチ開発~

JJUG CCC 2024 Fall
https://jjug.doorkeeper.jp/events/177443

#jjug_ccc #jjug_ccc_c

野村総合研究所(NRI)は「コンサルティング」「金融ITソリューション」「産業ITソリューション」「IT基盤サービス」の4事業を通じて、国内外の企業・行政の活動や、社会・暮らしを支えています。
今回のセッションでは私が所属する「IT基盤サービス」の取り組み事例として社内で公開したバッチアプリケーションの設計/開発ガイドラインについてお話します。

HayashiYuichiro

October 30, 2024
Tweet

Other Decks in Programming

Transcript

  1. 1 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動 02 バッチ設計ガイドライン 03 バッチ開発ガイドライン 04 01 野村総合研究所について 最後に 05
  2. 3 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    野村総合研究所の事業領域 野村総合研究所について コンサルティング マネジメントとシステム分野において あらゆる産業のコンサルティング 金融ITソリューション 金融分野でのシステム開発や ソリューションを提供 産業ITソリューション 産業分野でのシステム開発や ソリューションを提供 IT基盤サービス 企業のIT基盤の構想・設計・構築・ 運用などのサービスやソリューションを 提供
  3. 4 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    IT基盤サービス事業領域におけるソリューション例 野村総合研究所について ObjectWorks X [オブジェクトワークス テン] システム開発に必要な汎用機能 を提供。 OpenStandia [オープンスタンディア] OSSの運用・構築・導入の ワンストップサポートサービスを 提供。 ※Java、Go、Pythonなどの 言語からSpringなどのFWまで 幅広くサポート 他にも様々なソリューションを提供しています。 興味がある方は NRIのHPをご確認ください! aslead [アスリード] 大規模システム開発において、 スムーズな情報共有・課題の管 理分析などを提供し成果物の 品質向上と業務効率化の双 方をサポートする開発管理統合 サービスです。
  4. 5 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ソリューション紹介:OpenStandia 野村総合研究所について OpenStandiaとは、NRIが提供する OSSに対するサポート&サービスの総称です。 サービスライナップ ◼オープンソース年間サポートサービス ◼オープンソース導入サービス ◼プロフェッショナルサービス(技術相談) 公式HP:https://openstandia.jp/oss_info/ 2024/10現在 129製品をサポート!!
  5. 7 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動(xPalette) 野村総合研究所について xPalette(クロスパレット)とは?
  6. 8 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteが提供するモノ 開発コミュニティ活動 ガイドライン ライブラリ サンプル/テンプレート Prj 開発手順や方式の説明 開発に利用可能な部品群 開発の雛形/実装例 各処理方式についての設計考慮 事項を記載。設計ガイドラインの内 容に沿ってアプリケーションを実装す る際の実装方式や実装例を参照 することで高品質なアプリケーション 開発が可能となる。 ガイドラインに記載した部品をライブ ラリとして提供。テンプレートプロジェ クトに組み込むことで素早いアプリ ケーション開発が可能となる。 ガイドラインに記載した実装例を実 際に動くサンプルコードとして提供。 テンプレートは開発開始時にプロ ジェクトの雛形として利用する。
  7. 9 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動(xPalette)の構想 開発コミュニティ活動 (開発ベースライン) フィードバック 社外のエンジニア/企業 NRIのお客様 開発/エンハンス xPalette開発コミュニティ 社内開発PJ 公開/利用 プロダクト開発 公開/利用 フィードバック 構想 xPalette
  8. 10 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動のきっかけ 開発コミュニティ活動 開発現場のトレンド ◼ 利用技術のオープン化 OSSなどオープンな開発技術の採用 が求められる。 ◼ 技術の多様化と高度化 クラウドネイティブ、マイクロサービスなど を中心に技術が多様化している。 開発現場の課題 ◼ 技術適用の準備が不十分 スピーディーな開発が求められており、 開発の準備に労力を要する。 ◼ 高度技術エンジニアの不足 最適な技術選定・適用方法を検討 することができる高度なエンジニアの確 保が難しい。 全社としての課題 ◼ ノウハウ・ナレッジの点在 ノウハウやナレッジ共有の仕組みはあ るものの、ソースコードレベルでのノウハ ウ共有の場(Gitリポジトリ)がない ため、全社的な技術情報の共有が効 率的にできていない。 多様な技術から選択できる半セルフの開発ベースラインが必要。 さまざまな案件で得たナレッジで継続的にブラッシュアップする場としてxPaletteを提供する。
  9. 11 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteの活動領域 開発コミュニティ活動 バックエンド領域 アプリ実行基盤領域 フロントエンド領域 アプリケーションレイヤー インフラレイヤー APP
  10. 12 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteの利用イメージ 開発コミュニティ活動 フロントエンド領域 バックエンド領域 アプリ実行基盤領域 将来的には生成AIの活用も検討 開発に必要となる技術要素を 組み合わせて素早いアプリ開発をサポート 開発 エンジニア
  11. 13 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    公開事例1(Next.js 公式ドキュメント和訳版) 開発コミュニティ活動 xPaletteの活動として作成したNext.js 公式ドキュメントの和訳版を公開
  12. 14 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    公開事例2( AILERON Gateway) 開発コミュニティ活動 AILERON Gatewayとは各種機能を持つフルスタックなAPI Gatewayです。 NRI発のOSSとして開発中!! GitHubにて公開予定、乞うご期待!! (2024年度内を予定)
  13. 15 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バックエンド領域の活動 開発コミュニティ活動 バッチアプリケーション オンラインアプリケーション 非同期アプリケーション バックエンド領域では「バッチ」「オンライン」「非同期」の3軸で活動中 特定の時刻やイベントで起動し、 特定の処理を実行する アプリケーション クライアントからのリクエストに 応じた処理を実行し、 即時に処理結果を応答する アプリケーション 処理要求に対して、 処理結果を即時に応答せず、 別のサーバーで処理を実行する アプリケーション
  14. 16 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteにおけるバッチの取組み バッチ処理方式設計ガイドライン バッチ設計ガイドライン 実装言語に依存せず、 バッチアプリケーション独自の設計に 関する考慮事項を解説したドキュメント バッチ開発ガイドライン 設計ガイドラインに記載した設計事項 をベースとしてバッチアプリケーションの 実装方式について解説するドキュメント サンプルプロジェクト 開発ガイドラインに記載している 実装例の実コード テンプレートプロジェクト 開発時にベースとして利用する テンプレートプロジェクト(ライブラリ込)
  15. 18 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ設計ガイドラインとは バッチ設計ガイドライン バッチアプリケーション独自の設計に関する考慮事項を解説したドキュメント ※社内でのみ公開
  16. 19 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ設計ガイドラインとは バッチ設計ガイドライン バッチアプリケーション独自の設計に関する考慮事項を解説したドキュメント バッチアプリケーションの設計考慮ポイントや設計観点 について解説するドキュメントは少ない印象であったので xPaletteの活動で作成しました
  17. 20 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチに関連する単語 バッチ設計ガイドライン バッチ プロジェクトや利用ツールによって利用する単語やニュアンスが異なる 各単語の定義や包含関係などを明確化しないとバッチアプリは開発できない ジョブ タスク ジョブネット グループ フレーム ステップ ウインドウ DAG ワーク フロー
  18. 21 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチの定義はヒトやプロジェクト等によって異なる! バッチの定義 バッチ設計ガイドライン バッチの語源通りに分類する派 と考えています 語源の通り一定量のデータ処理するものを バッチ処理方式であるとしつつ、 ファイル削除やマスタレコード更新などの 単発処理もバッチ処理として見なす派 バッチ=群、団、束 (引用:weblio英和時点・和英辞典) 語源の通りバッチとは一定量のデータを 処理する処理方式であるとし、 ファイル削除やマスタレコード更新などの 単発処理はバッチ処理ではないとする派 実行形態で分類する派 言葉の定義としてはこちらが正 システム開発現場ではこちらの考えが多い印象 スケジュール/イベント/手動で起動
  19. 22 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチの定義はヒトやプロジェクト等によって異なる! バッチの定義 バッチ設計ガイドライン バッチの語源通りに分類する派 と考えています 語源の通り一定量のデータ処理するものを バッチ処理方式であるとしつつ、 ファイル削除やマスタレコード更新などの 単発処理もバッチ処理として見なす派 バッチ=群、団、束 (引用:weblio英和時点・和英辞典) 語源の通りバッチとは一定量のデータを 処理する処理方式であるとし、 ファイル削除やマスタレコード更新などの 単発処理はバッチ処理ではないとする派 実行形態で分類する派 言葉の定義としてはこちらが正 システム開発現場ではこちらの考えが多い印象 スケジュール/イベント/手動で起動 バッチ設計ガイドラインは開発現場に寄り添った内容とするため 「実行形態で分類」
  20. 23 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ設計ガイドラインの目次 バッチ設計ガイドライン ◼バッチ処理とは • バッチ処理方式 • ジョブとジョブネット • ジョブマネージャー ◼ジョブ設計方式 • ジョブ分割 • ジョブマネージャーの役割 • 例外処理とリラン • ロギング • 入力チェック • ジョブ運用日付 • 排他制御 • ジョブ実行 ◼性能を考慮したジョブ設計 • データ読み込み処理 • データ書き込み処理 • 多重実行と並列実行
  21. 25 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ開発ガイドラインとは バッチ開発ガイドライン 設計ガイドラインに記載した設計事項をベースとして SpringBootを利用したバッチアプリケーションの 実装方式を解説するドキュメント ※社内でのみ公開
  22. 26 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーション開発の選択肢 バッチ開発ガイドライン バッチアプリケーションを開発する場合、大きく下記の3パターンの方法がある 開発方式 概要 OSSの利用 OSSの仕様に則ってアプリケーションを開発する方法 OSSの独自拡張 OSSをベースとして不足機能を独自機能として追加する方法 フルスクラッチ実装 OSSを利用せずにアプリケーションに必要となる機能を独自実装する方法 大多数は「OSS利用」もしくは「OSSの独自拡張」を選択する 主な選択肢は以下の2つ SpringBatch JSR-352 Batch Applications for the Java Platform
  23. 27 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーション開発の選択肢 バッチ開発ガイドライン バッチアプリケーションを開発する場合、大きく下記の3パターンの方法がある 開発方式 概要 OSSの利用 OSSの仕様に則ってアプリケーションを開発する方法 OSSの独自拡張 OSSをベースとして不足機能を独自機能として追加する方法 フルスクラッチ実装 OSSを利用せずにアプリケーションに必要となる機能を独自実装する方法 大多数は「OSS利用」もしくは「OSSの独自拡張」を選択する 主な選択肢は以下の2つ Spring Batch JSR-352 Batch Applications for the Java Platform バッチ開発ガイドラインはSpringBootをベースとするが、 SpringBatchは利用しない方針としている (OSSの独自拡張に分類)
  24. 28 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    なぜSpringBatchではないのか? バッチ開発ガイドライン 開発現場におけるSpringBatchの課題(特にSI開発で) • フレームワークのアーキテクチャを理解した上でのジョブ設計が必要となるため、ジョブ設計のコストが高くなる • Input/Processor/Outputの構成が前提となるため、処理途中で入出力が発生する複雑なジョブの実装に不向き • JobRepositoryと呼ばれるジョブ管理機能がデフォルトで有効化されてしまうため、DBの利用が必須 • Taskletを利用するのであればSpringBatchにこだわる必要はない SpringBatch自体はバッチアプリケーションにおける素晴らしいOSSであるが・・・
  25. 29 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    なぜSpringBatchではないのか? バッチ開発ガイドライン 開発現場におけるSpringBatchの課題(特にSI開発で) • フレームワークのアーキテクチャを理解した上でのジョブ設計が必要となるため、ジョブ設計のコストが高くなる • Input/Processor/Outputの構成が前提となるため、処理途中で入出力が発生する複雑なジョブの実装に不向き • JobRepositoryと呼ばれるジョブ管理機能がデフォルトで有効化されてしまうため、DBの利用が必須 • Taskletを利用するのであればSpringBatchにこだわる必要はない SpringBatch自体はバッチアプリケーションにおける素晴らしいOSSであるが・・・ SpringBatchを利用しないSpringベースのバッチ実装機能が 必要だと思い開発ガイドラインを作成しました
  26. 30 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ開発ガイドラインのコンセプト バッチ開発ガイドライン Springフレームワークが提供するDIといった基本機能は利用する 開発者は業務ロジック処理部分のみ実装する SpringBatchのコア機能は利用しない(SpringBatchに関する学習や実現性検証が不要) 提供部品は必要最低限とする
  27. 31 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ開発ガイドラインのスタック バッチ開発ガイドライン 開発ガイドラインではSpringBootをベースとした開発方式について解説 Spring Framework (SpringBoot) Java Job(業務ロジック) 独自ライブラリ Spring Batch Infrastructure Bean Validator Mybatis Other OSS libraries ファイル入出力機能でのみ SpringBatchの部品 (FlatFileItemReader)を利用。
  28. 32 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ開発ガイドラインで解説する内容 バッチ開発ガイドライン ジョブ起動 ApplicationRunnerを ベースとしてジョブ起動の ために実装した部品と利 用方法を解説。 業務ロジック実装 開発者が提供したジョブ IFを利用して業務ロジッ ク(ジョブ)をどう実装する のかについて解説。 終了コード ジョブ実行終了時に返却 する終了コード定義部品 や部品の利用方について 解説。 例外処理 例外ハンドリング箇所と 部品として提供する Exceptionクラスの利用 方法について解説。 ロギング Logback, slf4jを利用し たロギング方式やどういっ たログを出力すべきかにつ いて解説。 入力チェック BeanValidatorラップし た入力チェック部品とその 利用方について解説。 ジョブ多重化 マルチスレッドジョブを起 動するための部品および 実装方について解説。 データ入出力(DB) Mybatisを利用したDBの 入出力の実装方法につ いて解説。 データ入出力(ファイル) SpringBootが提供する FlatFileItemReaderを 利用したファイル入出力 方式について解説。 トランザクション DB to ファイル、ファイル to DBなど入出力パター ンごとのトランザクションパ ターンを実装例で解説。 ビルド/テスト プロジェクトのビルドや コンテナイメージのビルド 方式や手順について解説。 部品 部品 部品 部品 部品 部品 部品 共通部品として実装した機能
  29. 33 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチ開発ガイドラインで解説する内容 バッチ開発ガイドライン ジョブ起動 ApplicationRunnerを ベースとしてジョブ起動の ために実装した部品と利 用方法を解説。 業務ロジック実装 開発者が提供したジョブ IFを利用して業務ロジッ ク(ジョブ)をどう実装する のかについて解説。 終了コード ジョブ実行終了時に返却 する終了コード定義部品 や部品の利用方について 解説。 例外処理 例外ハンドリング箇所と 部品として提供する Exceptionクラスの利用 方法について解説。 ロギング Logback, slf4jを利用し たロギング方式やどういっ たログを出力すべきかにつ いて解説。 入力チェック BeanValidatorラップし た入力チェック部品とその 利用方について解説。 ジョブ多重化 マルチスレッドジョブを起 動するための部品および 実装方について解説。 データ入出力(DB) Mybatisを利用したDBの 入出力の実装方法につ いて解説。 データ入出力(ファイル) SpringBootが提供する FlatFileItemReaderを 利用したファイル入出力 方式について解説。 トランザクション DB to ファイル、ファイル to DBなど入出力パター ンごとのトランザクションパ ターンを実装例で解説。 ビルド/テスト プロジェクトのビルドや コンテナイメージのビルド 方式や手順について解説。 部品 部品 部品 部品 部品 部品 部品 共通部品として実装した機能 本日お話する機能 本日はジョブ起動/実行関連機能を解説します
  30. 34 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ジョブ起動 ApplicationRunnerを ベースとしてジョブ起動の ために実装した部品と利 用方法を解説。 業務ロジック実装 開発者が提供したジョブ IFを利用して業務ロジッ ク(ジョブ)をどう実装する のかについて解説。 終了コード ジョブ実行終了時に返却 する終了コード定義部品 や部品の利用方について 解説。 例外処理 例外ハンドリング箇所と 部品として提供する Exceptionクラスの利用 方法について解説。 ロギング Logback, slf4jを利用し たロギング方式やどういっ たログを出力すべきかにつ いて解説。 入力チェック BeanValidatorラップし た入力チェック部品とその 利用方について解説。 ジョブ多重化 マルチスレッドジョブを起 動するための部品および 実装方について解説。 データ入出力(DB) Myabtisを利用したDBの 入出力の実装方法につ いて解説。 データ入出力(ファイル) SpringBootが提供する FlatFileItemReaderを 利用したファイル入出力 方式について解説。 トランザクション DB to ファイル、ファイル to DBなど入出力パター ンごとのトランザクションパ ターンを実装例で解説。 ビルド/テスト プロジェクトのビルドや コンテナイメージのビルド 方式や手順について解説。 部品 部品 部品 部品 部品 部品 まずは通常ジョブの実行終了に関する内容について
  31. 35 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】:SpringBootにおけるジョブ実装 バッチ開発ガイドライン 実装 引数の受け取り方 ApplicationRunner 独自に引数をパースすること無く実装可能。 CommandLineRunner コマンド引数を利用する場合はパースが必要。 開発ガイドラインでは ApplicationRunnerをベースにジョブ起動機能を独自拡張 SpringBootではCLIアプリケーション向けの機能として ApplicationRunnerとCommandLineRunnerを提供している
  32. 36 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】: ApplicationRunner バッチ開発ガイドライン ApplicationRunnerを実装したクラスを作成しrunメソッド実装するだけでOK 実装例 実行結果 一見、独自部品を作り込む必要がなさそうだが・・・
  33. 37 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】: ApplicationRunnerの問題点 バッチ開発ガイドライン 1つの開発プロジェクトに複数のApplicationRunnerの実装クラスを追加した場合
  34. 38 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】: ApplicationRunnerの問題点 バッチ開発ガイドライン 1つの開発プロジェクトに複数のApplicationRunnerの実装クラスを追加した場合 ApplicationRunnerだけでは複数のジョブ開発ができないため、 アプリ起動時にジョブ名から処理対象のジョブを引き当てる仕組みを実装
  35. 39 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】:開発ガイドラインにおけるジョブ起動方式 バッチ開発ガイドライン
  36. 40 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ジョブ起動例 バッチ開発ガイドライン 「ジョブ識別子」と「ジョブ実行ID」をコマンドとして指定する 例:java –jar <jarファイル> <ジョブ識別子> <ジョブ実行ID> <ジョブパラメータ> ジョブ識別子(必須) バッチアプリケーション起動時に どのジョブを実行するかを明示的 に示す識別子。実装するジョブに 設定する値であり、ジョブ名/ジョブ IDなどを設定する。 ジョブ実行ID(任意) バッチアプリケーション起動時に設 定するID起動したジョブをトレーシ ングするためのIDでログに出力する。 過去・未来で一意となる値を設 定する。設定しない場合はUUID が自動で設定される。 ジョブパラメータ(任意) 業務処理に必要となる値を設定 するパラメータ。パラメータを必要と しないジョブの場合は不要である。
  37. 41 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動/業務ロジック実装】:Jobの実装 バッチ開発ガイドライン (1) 「sample-job」というジョブ識別子のジョブの実装例 (1): ジョブ識別子の設定 @JobIdentifierアノテーションでジョブ識別子を設定する。 (2): ジョブ定義基底クラスの継承 ジョブを実装する場合、Jobインタフェースを継承した基底クラ スをextendして実装する。 • SingleExecutionJob:シングルスレッドジョブ用 • MultiExecutionJob:マルチスレッドジョブ用 (3): ジョブ実装メソッドの実装 基底クラスのジョブ実行メソッド「execute」をoverrideして ジョブを実装する。 (2) (3)
  38. 42 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動/業務ロジック実装】: JobContext バッチ開発ガイドライン (1) 「sample-job」というジョブ識別子のジョブの実装例 (1): JobContext バッチアプリケーション起動時に指定したジョブ識別子や コマンドラインパラメータ、終了コードなどジョブ実行に必要とな る基本情報を格納したContextクラス。
  39. 43 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【終了コード】:JobExecutionResult バッチ開発ガイドライン (1) 「sample-job」というジョブ識別子のジョブの実装例 (1): 終了コード ジョブの終了コードを管理するクラス。 業務ロジックで終了コードを指定する。 終了コードは「SUCCESS」「ERROR」「WARNING」が選択可能。
  40. 44 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】JobRunner バッチ開発ガイドライン ApplicationRunnerを継承したジョブ実行のコアクラス。 ジョブ起動時に指定したジョブ識別子に一致するジョブ実装クラスのBeanを取得し実行する
  41. 45 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】JobRunner バッチ開発ガイドライン ApplicationRunnerを継承したジョブ実行のコアクラス。 ジョブ起動時に指定したジョブ識別子に一致するジョブ実装クラスのBeanを取得し実行する (1) (1): JobContextの生成 JobContextを生成し、ジョブ識別子やジョブ実行ID、 ジョブ起動パラメータなどを設定する。
  42. 46 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【ジョブ起動】JobRunner バッチ開発ガイドライン ApplicationRunnerを継承したジョブ実行のコアクラス。 ジョブ起動時に指定したジョブ識別子に一致するジョブ実装クラスのBeanを取得し実行する (1): Jobの引き当て&実行 ジョブ実行時に設定したジョブ識別子に一致するBeanを JobFactoryから取得し実行する。 (2): エラーハンドリングと終了ログの出力 ジョブで発生したExceptionをcatchし、ログ出力および 終了コードを設定しジョブを終了する。 (1) (2)
  43. 47 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ジョブ起動 ApplicationRunnerを ベースとしてジョブ起動の ために実装した部品と利 用方法を解説。 業務ロジック実装 開発者が提供したジョブ IFを利用して業務ロジッ ク(ジョブ)をどう実装する のかについて解説。 終了コード ジョブ実行終了時に返却 する終了コード定義部品 や部品の利用方について 解説。 例外処理 例外ハンドリング箇所と 部品として提供する Exceptionクラスの利用 方法について解説。 ロギング Logback, slf4jを利用し たロギング方式やどういっ たログを出力すべきかにつ いて解説。 入力チェック BeanValidatorラップし た入力チェック部品とその 利用方について解説。 ジョブ多重化 マルチスレッドジョブを起 動するための部品および 実装方について解説。 データ入出力(DB) Myabtisを利用したDBの 入出力の実装方法につ いて解説。 データ入出力(ファイル) SpringBootが提供する FlatFileItemReaderを 利用したファイル入出力 方式について解説。 トランザクション DB to ファイル、ファイル to DBなど入出力パター ンごとのトランザクションパ ターンを実装例で解説。 ビルド/テスト プロジェクトのビルドや コンテナイメージのビルド 方式や手順について解説。 部品 部品 部品 部品 部品 部品 マルチスレッドで実行するジョブ向けの部品について解説
  44. 48 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【多重実行】並列と多重の定義 バッチ開発ガイドライン 並列化 多重化 異なるジョブを横並びで同時に実行する 異なるデータに対して同じジョブを 横並びで同時に実行する 設計/開発ガイドラインでは並列と多重を以下のように定義 ジョブマネージャーで制御 ジョブマネージャーや マルチスレッドジョブで制御
  45. 49 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【多重実行】並列と多重の定義 バッチ開発ガイドライン 並列化 多重化 異なるジョブを横並びで同時に実行する 異なるデータに対して同じジョブを 横並びで同時に実行する 設計/開発ガイドラインでは並列と多重を以下のように定義 ジョブマネージャーで制御 ジョブマネージャーや マルチスレッドジョブで制御 多重化におけるマルチスレッドジョブの部品を提供
  46. 50 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【多重実行】多重実行の前提 バッチ開発ガイドライン 入力対象データを多重度に合わせて分割するジョブ。 ファイルの場合、1つのファイルを複数ファイルに分割する。 DBの場合は、処理範囲を複数のファイルに出力する。 データ分割ジョブ データ分割ジョブで分割したファイルを入力データとして受け取る。 ファイル数を多重度としてマルチスレッドで対象データを処理する。 マルチスレッドジョブ ジョブを多重実行させる場合、事前にデータの分割処理を別のジョブで実装する必要がある
  47. 51 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    【多重実行】多重実行ジョブの実装 バッチ開発ガイドライン 非同期にジョブを実行するために多重実行用の基底クラスを提供。 開発者は基底クラスをextendsしたジョブクラスを実装するだけで 多重実行可能なジョブの実装が可能。 (1). ジョブが受け取るデータを 「preHandleExcute」メソッドで指定する。 →入力ファイルのパスを配列化する。 (2). 「execute」メソッドに多重実行する業務ロジックを実装。 → 配列の要素単位でバッチ処理を実行。 多重実行ジョブの実装例 (1) (2)
  48. 53 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼開催情報 日時:2024/11/22(金) 18:00~20:00 場所:横浜野村ビル(みなとみらい) 主催:Netadashi Meetup運営事務局 ※株式会社野村総合研究所 「Netadashi Meetup #13」のお知らせ Netadashi Meetupとは? Netadashi Meetupは、技術に興味がある人が集まって交流することを目的とした会です。 食事とお酒を楽しみながら、技術ネタの発表を通じてワイワイしてます! 今回は13回目の開催で、「バックエンド領域」をメインテーマとした内容を予定しています。 本日詳しく話せなかったバッチ設計についてお話します。 ネタまる (Netadashi Meetup公式キャラクター) 「技術には詳しくないけど興味はある方」「飲みたい!方」「様々な方と交流したい方」 などなど大歓迎です! ★イベント申込みはこちらから★