我正在为我们的文件上传过程执行一个spring批处理工作。我的要求是读取平面文件,应用业务逻辑,然后将其存储在DB中,然后发布一个Kafka消息。
我有一个基于块的步骤,它使用自定义的读取器、处理器和写入器。这个过程工作得很好,但是处理一个大文件需要很多时间。
处理一个有60k条记录的文件需要15分钟。我需要减少到5分钟以下,因为我们将消耗比这更大的文件。
根据https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html,我理解使其多线程化会提高性能,但代价是重启能力。但是,我使用的是FlatFileItemReader、ItemProcessor、ItemWriter,它们都不是线程安全的。
有什么建议可以改善这里的表现吗?
这是writer代码:-
public void write(List<? extends Message> items) {
items.forEach(this::process);
}
private void process(Message message) {
if (message == null)
return;
try {
//message is a DTO that have info about success or failure.
if (success) {
//post kafka message using spring cloud stream
//insert record in DB using spring jpaRepository
} else {
//insert record in DB using spring jpaRepository
}
} catch (Exception e) {
//throw exception
}
}
最好的问候,Preeti
我怎样才能停止一个工作在Spring批次?我尝试使用下面的代码来使用这个方法: 我尝试也完成了,失败了,但这个方法不工作,作业继续执行。有解决办法吗?
我第一次使用spring batch应用程序,由于框架太灵活了,我有几个关于性能和实现作业的最佳实践的问题,在spring文档中找不到明确的答案。 > 读取由第三方以先前指定的布局发送的具有固定列长值的ASCII文件(第1步读取器) 在oracle数据库上写入有效行(第1步写入器) 执行前一步后,使用第1步的finish时间戳更新数据库中的表(第2步tasklet) 当作业停止时,发送一封电子邮件
在产品发布的最后一分钟,我发现Java Spring批处理有一个奇怪的问题。它进入无限循环。 这是我的配置: 记录总数为10条。因此,提交是在处理每一条记录之后进行的。我正在将结果写入Writer中的数据库。 我从阅读器中一个接一个地获取项目,处理并写入数据库。 它一直在运行,并将数据无限地插入表中。 观察结果是:提交间隔 如果有人提出一些解决方案/解决方法,在因为这个问题而举行生产发布时,这将对
我们当前的代码库具有以下重要特征: 一个代码库-但是很多批处理(我们在批处理之间重用代码) 目前,我们在代码库中有多个main()方法,并且只有不同的shell脚本来调用正确的main类。 我希望在Spring Batch中解决以下问题: null 提前谢了。
我很难找到这个问题的正确答案。当使用Spring批处理框架时,是否可以尝试在一个通用作业中解决所有的批处理?
我知道spring-batch-admin是不推荐的。但是,我们现在不能使用spring-cloud-data-flow。是否有其他替代方案来监控和按需重启作业?