- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题很简单:如何将仅在 ItemReader
中知道的值(例如当前文件名)传递给 ItemProcessor
?
@Bean
@JobScope
public ItemReader<String> reader(@Value("#{jobParameters['path]}") String path) {
FlatFileItemReader<String> delegate = new FlatFileItemReader<>();
delegate.setLineMapper(new PassThroughLineMapper());
Resource[] res = new PathMatchingResourcePatternResolver().getResources("file:" + path);
MultiResourceItemReader<String> r = new MultiResourceItemReader<>();
r.setResources(res);
r.setDelegate(delegate);
return r;
}
@Bean
public ItemProcessor<String, String> processor() {
return new ItemProcessor<String, String>() {
@Override
public String process(String item) throws Exception {
//TODO I need the filename that is currently processed. HOW?
return null;
}
};
}
最佳答案
为了安全起见,您应该将文件名添加到读取器返回的对象中。为此,您必须实现自己的包装器 Reader。像这样的事情:
public class MyReader {
private MultiResourceItemReader delegatereader;
public MyContainerDto read() {
String line = delegatereader.read();
if (line==null) return null;
Resource currentResource = delegatereader.getCurrentResource();
MyContainerDto container = MyContainerDto();
container.setLine(line);
container.setResourceName(currentResource.getFileName());
return container;
}
...
}
(此代码未经测试,它只是说明了我将采取的方法)
在我的笔记本电脑上,我能够在一秒钟内创建 100 万个对象,因此创建对象所需的额外性能实际上并不会显着影响整体性能。
问题是,读取器读取的项目数量与 block 大小定义的一样多。之后,它将为该 block 中的每个项目调用处理器。因此,在一个 block 内,其中的项目可能是从不同的文件中读取的。因此,除了在阅读器中将行和文件名绑定(bind)在一起之外,没有其他方法。
另请参阅https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/
关于java - 如何在 spring-batch 中将参数从 ItemReader 传递到 ItemProcessor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757856/
有没有办法改变 ItemProcessor 的跳过行为,使其表现得像 ItemWriter?在 ItemProcessor 中抛出可跳过的异常会导致重新处理所有已接受的项目,从而导致其复杂性呈二次方的
我在我的批处理 Spring 项目中定义了一个作业流,并定义了 ItemReader、ItemProcessor、ItemWriter 等 我的 ItemReader 如下代码: @Component
以下是阅读器bean的代码示例 有 .我有一个类似的作家 bean 。我想要一个处理器的动态切换器。界面ItemProcessor需求I & O值得一提的是,要么我必
如果项目符合特定逻辑,我希望能够在处理它时删除它。例如,如果该项目不包含我要查找的值,我不希望将该项目写出到文件中。 我目前正在使用一个实现 ItemProcessor 的类. 我只是返回null吗?
我正在使用 Spring Batch 来解析我的文件。在 ItemProcessor 中,我验证传入字段是否正确。如果不是,我想抛出 ValidationException 并将具有不正确字段的相应行
我需要将一些数据从一个表迁移到另一个表,并在两者之间进行一些处理。处理是专有的,并作为 REST 服务公开。因此,我需要调用 REST 服务从表中读取记录,然后将处理后的记录写入另一个表中。如何将其实
我有一个场景,我需要解析平面文件并将这些记录处理到 mysql 数据库插入(模式已经存在)。 我正在使用 FlatFileItemReader 解析文件,并使用 JdbcCursorItemWrite
我正在编写一个 spring 批处理作业,在我的一个步骤中,我有以下处理器代码: @Component public class SubscriberProcessor implements Item
我有一组非常大的电子表格,需要使用 Spring Batch 生成。 我有一个 ItemReader 发出“行”,我希望我的 ItemProcessor 每收到 3000 行发出 1 个“表”。 有什
所以我在 Spring Batch 3.0.7.RELEASE 和 Spring 4.3.2.RELEASE 中遇到问题,监听器没有在我的 ItemProcessor ItemStreamReader
我需要在项目处理器之间传递与处理项目相关的数据,我不需要保留数据,最好的方法是什么(注意我目前正在使用 StepSynchronizationManager 访问 stepExecution 并将数据
问题很简单:如何将仅在 ItemReader 中知道的值(例如当前文件名)传递给 ItemProcessor? @Bean @JobScope public ItemReader reader(@Va
我有一个 Spring Batch 应用程序来获取 samba 服务器中的文件并在同一服务器上的不同文件夹中生成新文件。然而,流程中仅调用 ItemReader。问题是什么?谢谢。 批量配置: @Co
我想知道这样的流程: ItemReader -> ItemProcessor -> ItemWriter 其中每一个都是实现等效接口(interface)的自定义类,并且在面向 block 的步骤中,
我在 Spring Boot 和 Spring Batch 应用程序中遇到问题,我分享我的情况,我的 Layer Dao 是一个抛出 NPE (NullPointerException) 的接口(in
所以我正在创建我的第一个 Spring 批处理作业。我正在尝试读入 xml,操作一些值,然后将其写出。如果我不实现 org.springframework.batch.item.ItemProcess
我是一名优秀的程序员,十分优秀!