複数のステップでスプリングバッチを使用していますが、私は実行時にメモリの占有量が増えていることがわかります。複数のCSVファイルから。これらのデータを使っていくつかの変換レコードを削除しています。複数のステップで使用されているマップメモリ空間を解放する
私の質問は、メモリ占有を解放する最も/適切な方法です。
@Bean
public Job importParameterJob() {
return jobBuilderFactory.get("importParameterJob")
.incrementer(new RunIdIncrementer())
.start((step1()))
.next((step2))
.next((step3))
.next((step4))
.next((step5))
.next(finalStep())
.build();
}
のは、ここでは例を見てみましょう、私のステップ2は、アラがステップ2ストアのアイテムのプロセッサに、より正確に、マップリスト上のすべてのレコードを(リスト)をマッピングするためにcsvファイルからのレコードのレッズ格納するリストを使用している
私は他のステップの中にこの地図を使用する必要が何らかの理由でpublic class Step2ItemProcessor implements ItemProcessor<Step2FileRow, Step2FileRow> {
private static final Logger log = LoggerFactory.getLogger(Step2ItemProcessor.class);
private Map<Long , Step2FileRow> step2FileRowMap;
public Step2ItemProcessor() {
step2FileRowMap = new HashMap<Long , Step2FileRow>();
log.info("Step2 ItemProcessor a été crée avec une Map pour charger tous les Step2s");
}
@Override
public Step2FileRow process(final Step2FileRow Step2FileRow) throws Exception {
step2FileRowMap.put(Step2FileRow.getId(), Step2FileRow);
log.info("Le Step2 ID :" + Step2FileRow.getId() +" a été ajouté dans la liste des Step2s en memoire Map");
return null;
}
public Map<Long , Step2FileRow> getstep2FileRowMap() {
return step2FileRowMap;
}
}
、 作業が行われた後に必要なリストは、私はまだTODO、すべてのこれらのレコードのメモリ上の持っているものドードーするために使用されている場合、私の質問サンザシ缶私はこのItemProcessorを彼のリストで解放します。 私はタクレットを使用してこのItemProcessorを注入し、そのリストをnullにする必要がありましたか?または地図からレコードを解放するには、clear()メソッドを使用し
@Autowired
private Step2ItemProcessor listObject;
'Step2ItemProcessor'が実装' JobExecutionListener'と 'クリア()afterJob'で 'マップをしようと() ' –
あなたの親切な助けていただきありがとうございます。私はまだ私はいくつかのものを実行するときに参照する必要があるいくつかのレコードをマップストアを述べたように、私はまだステップ3とステップ4でマップを使用していることはできません)、実際にステップ5からこのマップを参照していないので、このマップを削除することができます。このなぜ私は 'step5'は' StepExecutionListener' –
と思っていますnullを返す。 \t} –