当前位置: 首页 > 知识库问答 >
问题:

如何在没有itemwriter的情况下编写spring批处理步骤

叶鸿振
2023-03-14

我正在尝试在没有项目编写器的情况下使用下面的配置来配置spring批处理步骤。然而,我错误地说writer元素既没有'writer'属性,也没有元素。

我浏览了链接spring批处理:没有ItemWriter的Tasklet。但无法解决问题。有人能告诉我在我提到的代码片段中要做的具体更改吗

<batch:job id="helloWorldJob">
        <batch:step id="step1">
            <batch:tasklet>
                <batch:chunk reader="cvsFileItemReader"
                    commit-interval="10">
                </batch:chunk>
            </batch:tasklet>
        </batch:step>
    </batch:job>

    <bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

        <property name="resource" value="classpath:cvs/input/report.csv" />

        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="names" value="id,sales,qty,staffName,date" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean class="com.mkyong.ReportFieldSetMapper" />

                    <!-- if no data type conversion, use BeanWrapperFieldSetMapper to map by name
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="prototypeBeanName" value="report" />
                    </bean>
                     -->
                </property>
            </bean>
        </property>

    </bean>

共有3个答案

黄沈浪
2023-03-14


在maven repo中,您可以找到Spring批处理样本框架

org.springframework.batch.sample.support.DummyItemWriter
蒋茂材
2023-03-14

我希望你能得到答案,但我想为其他读者解释一下,当我们使用块时,通常我们声明读取器、处理器和写入器。在块中,读取器和写入器是强制性的,处理器是可选的。在你的情况下,如果你不需要写入器,那么你需要创建一个实现ItemWriter的类。覆盖写入方法并保持空白。现在创建一个写入器类的bean,并将其作为写入器的引用传递。

<batch:step id="recordProcessingStep" >
        <batch:tasklet>
            <batch:chunk reader="fileReader" processor="recordProcessor"
                writer="rocordWriter" commit-interval="1" />
        </batch:tasklet>
    </batch:step>

你的写作课看起来像。

public class RecordWriter<T> implements ItemWriter<T> {
@Override
public void write(List<? extends T> items) throws Exception {
    // TODO Auto-generated method stub

}

}

狄睿
2023-03-14

对于基于组块的步骤,读写器是必需的
如果你不想要一个编写器,请使用不做任何操作的ItemWriter。

编辑:
no-op实现是接口的空实现...什么都不做!
让你的类用空方法实现期望的接口。

No-op ItemWriter:

public class NoOpItemWriter implements ItemWriter {
  void write(java.util.List<? extends T> items) throws java.lang.Exception {
    // no-op
  }
}
 类似资料:
  • 在我的项目中,我用Spring Batch 2.2编写了一个Quartz调度器。 根据我的要求,我想运行一个调度程序来获取应用程序配置属性,以刷新所有GlassFish集群上的配置缓存。 所以我不需要ItemWriter和ItemReader,它们用于文件读/写操作。那么我可以从中删除ItemReader和ItemWriter吗? 我的工作配置如下所述: 我正在编写业务逻辑以刷新JobClass

  • 我的情况: 我在readerItem中从db读取了类A。然后我需要处理这个类A并创建我在item处理机中做的类B。最后,我将这个类B保存到itemWriter中的db中。 问题:在处理过程中,我还需要创建具有类B外键的类C(约1 mil记录)并保存该类C。 我不能做这样的事情:因为正如我写的,我有大约100万条记录,我需要在内存中存储大约2gb的空间。所以我应该如何解决这个问题。 更新: 可能的解

  • 我能用一个ItemReader和多个子步骤编写一个Spring批处理步骤吗?每个步骤后面都有一个ItemProcessor和一个ItemWriter? 我正在努力实现这样的目标: 补充说明 为了避免前后矛盾,我宁愿不读两遍 我认为这个问题与Spring Batch不同:一个阅读器、多个处理器和编写器,因为我需要按顺序处理项目,而不是并行处理。

  • 我有一个简单的Spring批处理作业,包含几个步骤,最后一步是编写报表,所以我有ItemReader、ItemProcessor和ItemWriter。ItemWriter按块编写取决于步骤中定义的块数,但我需要等到获得所有项后再编写最终报告。我怎么能那样做?

  • 我试图理解和学习它是如何工作的PSR-4,因为我喜欢用这个标准,一个小应用程序进行重构。 根据几本手册,以及关于堆栈溢出的帖子,我的结构和文件都还可以。 ResellerApi.php内容: 关于我的作曲家。json(全局) 在我的工作目录/reseller.php PHPstorm不显示错误。 但是php显示错误... 编辑:在文件vendor/composer/autoload_psr4上运行

  • 我在这个论坛上找到了许多使用多个作家的例子。大多数,如果不是全部的话,答案集中在复合作者和分类作者身上。 业务需求:从输入文件中读取一行。这一行将包含多个字段(超过50个),需要写入它们自己的数据库表(理论上代表不同的类)。 我使用了一个字段集映射器来创建表示索赔行(ClaimLine)的对象。大多数字段是对文件中数据的简单映射,但少数字段需要更改其格式或相关字段映射逻辑。 基本item writ