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

具有不同实体的Spring Batch中的多个写入器

公羊学义
2023-03-14

Tasklet类是在以下三个方法中定义的:

    class Tasklet{
        doBeforeStep(){
        //Records a retrieved from the table.
        }

        doExecute(){
        //It opens the file and reads the file.
        //Does all the processing one by one and creates a 2 list of records to update into the database.
        }

        doAfterStep(){
        //The 2 list of records(Entities) are saved into the 2 different tables database using its corresponding repository class. Example:
RepositoryClass.saveall(List containing 105,000 records)  //using the CRUDRepository method
        }
    }

面临的问题:该文件包含150,000条记录,因此,在doExecute()方法之后,它将150,000条数据记录存储在列表中。在doAfterStep()方法中,它试图将列表中的所有150,000条记录保存到数据库中,从而导致事务超时错误。

解决办法:

            .get("stepToReadDataFromFile")
            .<Entity1, Entity2>chunk(1000)        
            .reader(FileReader()) 
            .processor(Processor())
            .writer(Writer())
            .build();```
public class FileProcessor extends ItemProcessor<Entity1, Entity2> {

在这个阶段,我们如何在这里发送2个实体,Entity2和entity3?

共有1个答案

印飞捷
2023-03-14

您可以将entity2entity3组合在一个对象中,并调整ItemProcessor以返回这个组合的对象。例如:

public class ProcessResult {

    private Entity2 e2;
    private Entity3 e3;
} 

ItemProcessor看起来像:

public class FileProcessor extends ItemProcessor<Entity1, ProcessResult> {


    public ProcessResult process(Entity1 e1){
        //processing ....

        return new ProcessResult(entity2 , entity3);
    }
}

ItemWriter中,您可以从ProcessResult访问Entity2Entity3

 类似资料:
  • 问题内容: 我有3个具有ManyToMany关系的实体: 角色实体: 权限实体: 功能实体: 我做了以下事情: 我创建了3个功能: 然后创建2个权限: Permission2 with Functionality2, Functionality3 然后创建一个角色: 我收到以下异常: java.lang.IllegalStateException:同一实体[com.persistence.enti

  • 目前正在进行一个项目,我的Spring Boot项目需要在同一个DB服务器中利用多个数据源或模式。我发现了几个在spring boot中教授多数据源配置的教程,其中实体foo存在于数据源A中,bar存在于数据源B中,即下面的内容。, https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot-和spring数据j

  • DBSchema-2表(用户和角色)具有多对多关系,并由postgres中的中间表(用户角色)桥接。我想获取所有角色和创建它的人的姓名。名称在用户表中可用,但所有其他详细信息在角色表中。Roles表中有一个由创建人(创建角色的人的用户id)创建的字段。 我正在尝试构建一个GET请求,以查看给定id的所有角色以及创建id的人的姓名 实体类Users1.java 实体类角色。JAVA 角色。存储库类

  • 我正在用spring security saml扩展实现一个多租户应用程序。 我为每个租户提供了一个服务提供商(SP)。所有SP都运行在与SP特定的第二级域公开的同一服务器上: sp1。myapp。com/myapi/1/ 在每个SP元数据文件中,我都配置了特定于租户的AssertionConsumerService。 当我测试SSO登录时,当SP端收到身份提供者(IDP)的响应时,我会得到一个K

  • 我是JPA新手。目前,我正在编写一个带有注释的本机查询。我有一个类似下面的类 我正在编写两个查询,其中一个查询在选择投影中包含字段2,而另一个不包含字段2。如何对这两个查询使用相同的类?我尝试了瞬态注释。但它使两个查询的值都为null。