2

春バッチ初心者です。複数のスレッドを使用して春からジョブを作成し、正常に実行しましたが、プログラムの実行が完了したときにプログラムフローが終了/停止しないことを除いて、完全に正常に動作します。つまり、main メソッドの最後のステートメントが実行されても、プログラムは終了しません。スレッドが完了するのを待ち続けるのか、それとも何なのかはわかりません。誰かがこれについてアドバイスしてもらえますか? 「以下はジョブの構成ファイルです

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
            <property name="corePoolSize" value="5" />
            <property name="maxPoolSize" value="5" />
</bean>

<batch:job id="helloWorldJob" job-repository="jobRepository">
       <batch:step id="step0" next="step1">
                <batch:tasklet ref="hello" transaction-manager="transactionManager" task-executor="taskExecutor" />
       </batch:step>        
       <batch:step id="step1">
                <batch:tasklet ref="world" transaction-manager="transactionManager" />
       </batch:step>
</batch:job>  

以下はランチャーコードです

public static void main(String args[]) {
        try {
            new ClassPathXmlApplicationContext("simpleJob.xml");

            JobParametersBuilder builder = new JobParametersBuilder();
            builder.addString("Date", "12/02/2011");
            jobLauncher.run(job, builder.toJobParameters());

            JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());

            System.out.println("\n\n"+jobExecution.toString());
            Thread.sleep(5000);
            System.out.println("End of execution ");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

上記のように、コードはタスク「hello」に対して5つの異なるスレッドで実行され、タスク「world」に対して1回実行されますが、メインメソッドの最後の行「実行の終了」が取得された後でもメインプログラムの実行が停止することはありません実行されました。リンクに関するホワイト ペーパーは、非常に高く評価されます。前もって感謝します サミール

4

1 に答える 1

1

スレッドプールはシャットダウンされていません。おそらくそれを行うための最良の方法は、アプリケーションコンテキストでclose()を呼び出すことです(安全のためにfinallyブロックで)。

于 2012-12-04T10:50:06.433 に答える