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