Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理条件步骤,未正确执行_Java_Spring Boot_Spring Batch - Fatal编程技术网

Java Spring批处理条件步骤,未正确执行

Java Spring批处理条件步骤,未正确执行,java,spring-boot,spring-batch,Java,Spring Boot,Spring Batch,我对spring batch基本上是新手。第一步,我从SFTP服务器获取一个文件,并使用JSch将其传输到本地目录。第二步,我读取本地目录中的文件,并将内容写入数据库。问题在于,在某些情况下,只执行saveDrawingAltransaction(step2)而不执行getRemoteFile(step1) 配置类: @Qualifier("writer") @Autowired JdbcBatchItemWriter<TopUpTransaction> writer; @Qua

我对spring batch基本上是新手。第一步,我从SFTP服务器获取一个文件,并使用JSch将其传输到本地目录。第二步,我读取本地目录中的文件,并将内容写入数据库。问题在于,在某些情况下,只执行saveDrawingAltransactionstep2)而不执行getRemoteFilestep1

配置类:

@Qualifier("writer")
@Autowired
JdbcBatchItemWriter<TopUpTransaction> writer;

@Qualifier("reader")
@Autowired
FlatFileItemReader<TopUpTransaction> reader;

@Bean(name="importWithdrawalTransactionJob")
public Job importWithdrawalTransactionJob() throws Exception {
    return jobBuilderFactory.get("importWithdrawalTransactionJob")
            .incrementer(new RunIdIncrementer())
            .start(getRemoteFile()).on(ExitStatus.FAILED.getExitCode()).end()
            .next(saveWithdrawalTransaction()).end()
            .build();
}

@Bean
public GetRemoteFileTasklet sFtpGetRemoteFilesTasklet() {
    return new GetRemoteFileTasklet();
}

@Bean
public Step getRemoteFile() throws Exception {
    return stepBuilderFactory.get("getRemoteFile")
            .tasklet(sFtpGetRemoteFilesTasklet())
            .build();
}

@Bean
public Step saveWithdrawalTransaction() throws Exception {
    return stepBuilderFactory.get("saveWithdrawalTransaction")
            .<TopUpTransaction, TopUpTransaction> chunk(1)
            .reader(reader)
            .processor(processor())
            .writer(writer)
            .build();
}

我不知道该怎么办。。。我一直在尝试从各地找到的东西。请帮忙,谢谢

您可以使用
JobExecutionDeciderdecision
在故障期间控制流程

对于Xml,您可以提到这一点

<decision id="decision" decider="decider">
            <next on="FAILED" to="step2" />
            <next on="COMPLETED" to="step3" />
        </decision>

您可以使用
JobExecutionDeciderdecision
在故障期间控制流

对于Xml,您可以提到这一点

<decision id="decision" decider="decider">
            <next on="FAILED" to="step2" />
            <next on="COMPLETED" to="step3" />
        </decision>

我对JavaConfig没有信心,但在每次正确放置后都会调用
.end()
?在spring批处理中是否配置,如果步骤1失败,它将不会进入步骤2。如果第一步失败,则文件不可用,因此步骤2和步骤3正在做的事情,我的目标是,如果步骤1失败,批处理将结束。如果步骤1完成,则继续批处理。我还尝试了这个.start(getRemoteFile())。on(“COMPLETED”)。to(saveDrawingAltransaction())。end仍然有同样的问题@LucaBassoRicciMy的目标是,如果step1失败,批处理结束。如果步骤1完成,则继续批处理。我还尝试了这个.start(getRemoteFile())。在(“已完成”)。到(saveDrawingAltra)‌​nsaction()).end仍然有同样的问题@Gatisahi我对JavaConfig不太自信,但在每次正确放置后都会调用
.end()
?是否在spring批处理中配置,如果步骤1失败,它将不会进入步骤2。如果第一步失败,则文件不可用,那么步骤2和步骤3正在做什么,我的目标是,如果步骤1失败,批处理结束。如果步骤1完成,则继续批处理。我还尝试了这个.start(getRemoteFile())。on(“COMPLETED”)。to(saveDrawingAltransaction())。end仍然有同样的问题@LucaBassoRicciMy的目标是,如果step1失败,批处理结束。如果步骤1完成,则继续批处理。我还尝试了这个.start(getRemoteFile())。在(“已完成”)。到(saveDrawingAltra)‌​nsaction())。end仍然存在相同的问题@gatisahu
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception
{
    Session session = null;
    Channel channel = null;
    //deleteLocalFiles();
    System.out.println("=====start tasklet=====");
    try {
        JSch ssh = new JSch();
        session = ssh.getSession("username", "host", 22);
        session.setPassword("password");
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftp = (ChannelSftp) channel;
        sftp.get("*.rpt", "src/main/resources/files/");
    } catch (JSchException e) {
        e.printStackTrace();
    } catch (SftpException e) {
        e.printStackTrace();
    } finally {
        if (channel != null) {
            channel.disconnect();
        }
        if (session != null) {
            session.disconnect();
        }
    }
<decision id="decision" decider="decider">
            <next on="FAILED" to="step2" />
            <next on="COMPLETED" to="step3" />
        </decision>
jobs.get("job")
           .preventRestart()
           .listener(failedCleanupListener)
           .flow(step1)
           .next(step2)
           .next(step3)
           .end()
           .build();