私は、データベースとやりとりする多くの実行ファイルによって構成された、大きなWindowsレガシーアプリケーションを持っています。 実行可能ファイルは、4つの主な目的を有する:Windowsアプリケーションでのバッチファイルの置き換えについての質問はありますか?
(a)は、解析およびデータベース
上のファイルをロードし(B)ファイルを変換(例えば、ファイルをエンコード)Tthisも多くの部分にファイルを分割してもよいです。
(C)
(d)はこれらの実行可能ファイルは、彼らが何をすべきかに基づいて、3種類のものとすることができるバッチファイルによって呼び出されるファイル
を生成するデータベース内の複雑なアップデートのいくつかの並べ替えを実行します。
(1)外部パスからファイルを取得し、(b)、(c)で変換し、アクティビティの結果に関する通知を送信し、データベースにレコードを書き込みます。
(2)条件が満たされるまで待ってください。 (c)を実行し、ファイルを生成し、それを(b)で変換した後、1つまたは複数の宛先(ローカルファイル、データベース、ftp)にコピーし、アクティビティの結果に関する通知を送信し、データベースにレコードを書き込みます。
(3)、(ABCD)実行ファイルの他の複雑なシーケンスをコーディネート活動の結果に関する通知を送信、データベースにレコードを書き込む
バッチファイルは、Windowsマシン上で通常のBATファイルです(呼び出しおそらくお互いに)。ファイルはスケジューラによって起動されます。各バッチファイル-In
環境に関する情報のほとんど(一般的なディレクトリなど)にもタイプのファイルのほとんど(1)または(2)され、重複している:
問題がありますとても似ている。
-Theバッチファイルは、テスト環境のために簡単に設定できません、また彼らは簡単に自動的に
をテストしている通知のため、開始条件を待つ-Theコードが一部重複ES(ある場合errorAコールB 、エラーbコールc、エラーdコールe)。後藤の
-The使用は
- あなたは、バッチファイルが廃止され、正確にその定期的に 開く必要が送信または受信されているファイルを理解-to
と呼ばれているトラックを維持することはできません各バッチごとに個別に
-Theyは、アプリケーションの設計上の制約を課す、共通のコードでは、(各ジョブが呼び出された回数をカウントし、ES。デフォルトのロギングポリシーを持っている)、水平機能が実装-to離れ
抽象化することはできません(書き込みが必要ですunmaintainable?)多くのファイルのコード。プラス側では
:バッチが何らかの理由で失敗した場合、それは難しいことではない だと安全な状態に戻って状況を置くためのバッチを書くためになるようバッチファイルを簡単に変更されています。
これらは戦闘テスト済みです。
私は通知するための一般的な機能と構成(機能を提供するいくつかのJavaライブラリを記述します。彼らは、私は、このソリューションを作ってみた
長い時間のために生産してきましたタスクのクラスをロードして実行することができるJavaの "スクリプトエンジンフレームワーク"コマンドラインアプリケーションを記述する(タスククラスは関数を使用することができます) tで提供)
これらのスクリプトは、必要に応じて別のjarのクラスでユーザーが提供することができます。
スクリプトが自動スクリプトエンジンは、出力に
がコピーからファイルの生産を分離自体の説明とそのパラメータをスクリプトを依頼することができ
注釈を用いて文書化することができます私が代わりにスクリプト言語(PHP、Pythoの、ジャワの賛成で決めた
n)コンパイルの利点を得ることができ、 "致命的なエラー"を引き起こしてスクリプトの実行を停止させる共通のライブラリに何かを書くことを恐れる必要はありません。
私は一方で、私は同様に私が入れますタイプ3 のバッチを表現するのは困難になることを恐れ、これはほとんどの標準的なバッチファイル(タイプ1と2)の実行をsimplyfyすることを感じます自動化されたデプロイメントを配置し、悪いバッチファイルを作成すると問題が発生する可能性があります。コンパイルやテストのために発生する可能性が低い場合でも、エンジン自体にバグのあるコードをデプロイするか、すべてのスクリプトに影響を与えます。
システムの信頼性は100%で、システムタスクを実行するには締め切りとタイムウィンドウが必要です。
私の質問は次のとおりです。
バッチファイルは問題ありませんか?彼らはこの文脈で広く使われていますか?
私は正しい方向に進むと思いますか?私が考慮していないものはありますか? <
もっと良いアイデアはありますか?
私に役立つフレームワークを知っていますか?
今後このシステムを開発する価値はあると思いますか、それともバッチを維持するのがよいでしょうか?
開発する新しいソリューションはすべて、最初は既存のシステムと統合されるため、たとえば、アプリケーションサーバーで動作するようにすべてを書き換えることはできません。
はい、私が考慮しなかったことは、スケジューラでこれらの種類の機能を動かすことでした。私は、スケーラビリティを確保するために、スケーラビリティを確保する必要があります。 (JobSchedulerはクールです、私はそれを試しています)私はあまりにも多くのものをカスタマイズする必要があることを恐れる?たとえば、私は現在のユリウス日をJobパラメータとして提供することができ、dbのsmthを待つことができます。私はスケジューラーの経験がありません、それが生産されたら、システム管理者が監視作業をする必要があると思いますか?今日まで、私たちは非常に基本的なスケジューラを持っており、与えられた時間にのみジョブを起動できます。 –
多くのスケジューラはかなり強力です(あなたが会計日などの独自のカレンダーを定義できるようになります)。しかし、はい、物事はオペレータ/管理者のオーバーウォッチが必要です。他のすべてのものも見つけました。私たちはそのようなもののための演算子を指定しましたが、あなたの状況は異なるかもしれません。誰があなたのプロダクションシステムを今見守っていますか? –
短い答えは...誰も...私たちはこのシンプルなスケジューラを持っていますが、私は非常にシンプルで(ちょうど与えられた時間にジョブを起動します)、制御フローやエラー報告必要に応じて一部の人物)が単一のジョブに委任されます。 私はスケジューラがやると思うが、私は変更する可能性のある抵抗を恐れている。とにかく私はそれを試して、私の同僚にそれを示すつもりです、ありがとう。 あなたの投稿は、エラー処理/制御フローの報告が仕事そのものではなくスケジューリングの一部でなければならないことを認識させました。 –