Spring batch Spring批处理:处理多个实体并合并它们

Spring batch Spring批处理:处理多个实体并合并它们,spring-batch,Spring Batch,我需要对存储在关系数据库中的数据进行非规范化 相互链接的表太多,不可能构建单个查询来获取所有数据 这里有一个简化的情况: +-------------+ +-------------+ | | 1 N | | | Unitat +-----------> Authors | | | | | +-------------+

我需要对存储在关系数据库中的数据进行非规范化

相互链接的表太多,不可能构建单个查询来获取所有数据

这里有一个简化的情况:

+-------------+           +-------------+
|             | 1       N |             |
|   Unitat    +----------->   Authors   |
|             |           |             |
+-------------+           +-------------+
到目前为止,我已经构建了一个步骤,即获取所有
Unitat
行:

@Bean
公共项目阅读器(){
String sql=“select*from unitat”;
JdbcCursorItemReader JdbcCursorItemReader=新的JdbcCursorItemReader();
jdbcCursorItemReader.setDataSource(this.dataSource);
jdbcCursorItemReader.setSql(sql);
jdbcCursorItemReader.setVerifyCursorPosition(false);
setRowMapper(新的UnitatRowMapper());
返回jdbcCursorItemReader;
}
行映射器是:

公共类UnitatRowMapper实现行映射器{
私有静态最终字符串ID\u COLUMN=“ID”;
//...
@凌驾
公共unitt映射行(ResultSet ResultSet,int numRow)抛出SQLException{
Unitat Unitat=新Unitat();
unitat.setId(resultSet.getString(ID_列));
//...
返回装置;
}
}
这是我的处理器。它仅用于将字段填充到
unititDenormalized
对象中:

@组件
公共类UnitatMappingItemProcessor实现ItemProcessor{
@凌驾
公共UnitatDenormalized进程(Unitat Unitat)引发异常{
UnitatDenormalized非规范化=新的UnitatDenormalized();
非规范化的.setId(unitat.getId());
//非规范化的.set…()
返回非规范化;
}
}
下面是我当前的步骤和作业配置:

@Bean
公开步骤(
ItemReader MSSQLSItemReader,
UnitAtMappingGitProcessor处理器,
SolrItemWriter SolrItemWriter
) {
返回此.stepBuilderFactory
.get(“unitat”)
.chunk(100)
.reader(mssqlItemReader)
.处理器(处理器)
.作者(solrItemWriter)
.build();
}
@豆子
公共职务职务(步骤){
Job Job=this.jobBuilderFactory.get(“job1”)
.流程(步骤)
(完)
.build();
返回工作;
}
如何获取作者并将其合并到以前获得的
unitat

何时以及如何执行下一个代码

//我需要在这里填充“authors”:
非规范化。addAutors(…);
非规范化。addAutors(…);
我希望我已经解释得很好了…

你可以用这个。这个想法是在你的物品处理器中发出一个请求来充实物品

在您的情况下,查询将获取当前
unitat
项的作者,并在返回前将他们设置在
非规范化的
项上