1

我有一个在构造函数中编写的方法。
当我安排 Spring 批处理作业时,该方法不会在特定时间间隔内被调用。
只有在 Spring Batch Application 启动时才会调用它。
任何人都可以建议任何逻辑我如何安排一个Spring Batch应用程序,该应用程序将在特定时间间隔内重新启动我的应用程序。

    private int nextULPIndex;
    private List<Data> finalULPData;

        public JsonItemReaderFromULProspector() {
            ULProspectorAPICall.runShellScript();
            logger.info("API call to ULProspector successfully executed inside JsonItemReaderFromULProspector");
            logger.info("Inside Constructor of JsonItemReaderFromULProspector");
            initialize();
        }

        private void initialize() {

            List<Data> ulpData = ReadJSONFromULP.getJsonObject();
            logger.info("initialize() Started");

            finalULPData = Collections.unmodifiableList(ulpData);
            nextULPIndex = 0;

        }

在 ItemReader 类的 run() 方法中调用 finalULPData

我无法在 run() 中调用 initialize(),因为 run() 方法会根据块大小重复调用。

public class JsonItemReaderFromULProspector implements ItemReader<Data> {
@Override
    public Data read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {

        Data nextULPData = null;
        logger.info("read() method JsonItemReaderFromULProspector class :Start");
        if (nextULPIndex < finalULPData.size()) {
            nextULPData = finalULPData.get(nextULPIndex);

            nextULPIndex++;
        }

        return nextULPData;
    }
}

此类从 BatchConfig 类中调用,如下所示。

    @StepScope
    @Lazy
    ItemReader<Data> reader() {
        return new JsonItemReaderFromULProspector();

    }

    @Bean
    @Lazy
    public Step step1() throws Exception {
        return stepBuilderFactory.get("step1").<Data, ULPData>chunk(10).reader(reader()).processor(ulProspectorDataProcessor()).writer(ulpDataWriter.jsonFileDatabaseItemWriter()).build();
    }

    @Bean
    public Job job() throws Exception {
        return this.jobBuilderFactory.get("job").incrementer(new RunIdIncrementer())
                .start(callUlPApiStep())
                .next(deleteRecordsFromTableStep())
                .next(step1()).build();}
4

0 回答 0