Repository navigation
OTR_BatchProcessing
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
Open 棟梁でのバッチ処理(コンソール EXE)の実装方式。
- バッチの「P 層」はコンソール・アプリの
Mainである。専用の基底クラスは無い。 - B 層・D 層・引数/戻り値クラスは、オンラインと同じように使う。
- サンプル:
Samples/Bat_sample(SimpleBatch_sample、RerunnableBatch_sampleなど)。
static void Main(string[] args)
{
// net10.0 では構成の初期化が必要(.NET版の初期化処理)
GetConfigParameter.InitConfiguration("appsettings.json");
// コマンドラインの解析(/DAP /MODE1 … 形式のヘルパがある)
StringVariableOperator.GetCommandArgs('/', out argsDic, out valsLst);
// 引数クラス(画面名は実行ファイルの場所、コントロール名は "-")
var pv = new BatchParameterValue(asmLocation, "-", "UpdateAll", actionType, new MyUserInfo(...));
// B 層を呼ぶ
var rv = (BatchReturnValue)new LayerB().DoBusinessLogic(pv, DbEnum.IsolationLevelEnum.ReadCommitted);
if (rv.ErrorFlag) { /* 業務例外 */ }
}| 落とし穴 | 対策 |
|---|---|
| 全件をメモリに載せる | 主キーだけを先に取得し(SELECT PK … ORDER BY PK)、本体は分割して読む |
| ロング・トランザクション | コミット・インターバル:N 件ごとに 1 トランザクションにする |
| リランできない | 再開位置(何件目まで済んだか)をファイルに出力し、再実行時にそこから再開する |
| 多重化できない | EXE を多重起動し、主キーの範囲などをコマンドライン引数で変える |
| フェッチでメモリを食う |
DataReader(ExecSelect_DR)、フェッチ・サイズの調整 |
| DB との往復が多い | 配列バインド(ODP.NET)、バッチ SQL、クエリ・キャッシュ(自動生成 Dao) |
- 主キーの一覧を全件取得する(データ本体は持たない)。
- 一定件数(例:100 件)ごとに B 層を 1 回呼び、その範囲を「読む → 処理 → 書く → コミット」する。
- 再実行時は、処理開始位置を再開位置に差し替えて続きから実行する。
- 同期なら
Processを起動してWaitForExit()、非同期なら起動するだけ。 - 多重度・リトライ・結果通知が要るなら、非同期処理サービス(AsynchronousProcessingService)を使う。
- 多重起動の排他は
Semaphore/Mutexで行う。
- スキル
opentouryo-app-design(references/batch-processing.md)、opentouryo-layer-b、opentouryo-layer-dを使わせる。 - エージェントは全件を一度に読んで 1 トランザクションで処理しがちなので、件数の見積もりとコミット・インターバルをレビューで見る。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。