- - PR -
Javaでバッチプログラム:Thread.startかmain(String[] args)か
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-10-18 12:28
いつも参考にさせていただいております。
今回は掲題の件で質問です。 次期開発でJavaでバッチプログラムを作成することになりました。 といってもまだまだ情報がない状態なんですが、ふと掲題の件が疑問になりました。 通常どのように使い分けるのでしょうか? 漠然と以下のような感じかなぁ・・・という気はしてるのですが。 @並列で処理を行う場合はThread.start()で処理を起動する。 A1つずつ順次処理を行う場合はmain(String[] args)で処理を行う。 処理的にはファイルの読み込み・DB操作・メールの送信などになり バッチ本数は100本ちょっとになる予定です。 以上、参考になるURLでも結構ですのでアドバイスを頂ければ幸いです。 _________________ 3年目PG(そろそろSE?) Σ(゚д゚;) ハッ!? ベテランに昇格してる・・・ |
|
投稿日時: 2005-10-18 15:02
それぞれの処理が main メソッドに記載されているという前提条件があるということですよね?
でしたらご指摘の方法で問題ないかと思います。 ただ、それぞれの処理の最後に System.exit() が記述されていたら VM もろとも終了してしまいますので Runtime.exec() するようにしましょう。 ちなみに、スレッド数をあまりに多く立ち上げるとスレッドの切り替え処理の負担が大きくなって、パフォーマンスが低下することがあります。バッチ処理なんっでそれほど急ぐ処理はないでしょうから、並列処理もほどほどに。 |
|
投稿日時: 2005-10-18 15:29
ある程度潰しの利く方法として、
java.lang.Runnableもしくはそれの派生インターフェイスを実装して クラスを作成するという手段があります。 保守性の問題から、ある型から派生させたクラスである事が望ましいのですが、 Runnableであれば、マルチスレッド化も可能ですし、 runメソッドを直接実行すればシングルスレッドでもOKです。 mainメソッドでも問題ありませんが、 メリットは別VMを使用して直接起動したいときぐらいでしょうか。 しかしプログラムから起動したくなった場合に、 型がバラバラなのでプログラムが大変になると思います。 |
|
投稿日時: 2005-10-18 16:20
これから書くのであれば Ant タスクとしてコーディングするのもいいですね。
パラメータの受け渡しも簡単で、ハードコードしなくて済みます。 処理する順番も簡単に設定できますし、並行処理させたければ parallel タスクをかましてやれば Ok です。 http://ant.apache.org/manual/CoreTasks/parallel.html |
|
投稿日時: 2005-10-18 18:21
インギ様、かつのり様
ご返答ありがとうございます。 >インギ様 System.exit()の弊害について参考になりました。また、Antでの実行も視野に入れて検討したいと思います。 補足ですが、今開発では作成するバッチはWindows上で動作し、またタスクスケジューラで起動する可能性があるので、System.exit(int)でリターンコードを返しWindowsに通知する必要があるようです。 ですので、親クラスから子クラスの処理を起動し、親クラスで例外をcatchしてSystem.exit(int)を呼び出すなどの工夫をするようにしたいと思います。 >かつのり様 Runnableの実装でマルチ・シングルスレッドを切り替えられるというのはとても参考になりました。 あと、確かに型がばらばらだとバッチプログラムをキックする方のプログラムが大変ですね。 お忙しい中とても参考になるアドバイスありがとうございました。 また何かありましたらよろしくお願いします。 _________________ 3年目PG(そろそろSE?) Σ(゚д゚;) ハッ!? ベテランに昇格してる・・・ |
1