Spring batch 使用Spring批处理实现ETL
我需要为我正在进行的一个项目实现一个ETL应用程序 它有以下步骤:Spring batch 使用Spring批处理实现ETL,spring-batch,batch-processing,Spring Batch,Batch Processing,我需要为我正在进行的一个项目实现一个ETL应用程序 它有以下步骤: 需要从表中读取以检索将要 作为作业参数传入 步骤1返回的对象将进一步用于检索 一些数据来自第二个表 然后必须从一个平面文件中读取,该平面文件将与 步骤2中的值。应用业务逻辑。然后写一张表 我们使用的是Spring数据JPA,Spring集成 我面临的挑战是从表中读取值以检索作业的参数,然后启动作业 然后,步骤2的输出必须与文件信息一起发送,以便进一步处理 我知道如何独立地实施上述步骤,但很难将它们从一端连接到另一端 分享任何设计
分享任何设计上述内容的想法都会很好。提前谢谢。我会试着给你一些不同观点的想法 1-读取表格值并将其作为作业参数传递 我在这里看到两种解决方案: 您可以执行“手动”查询(即不使用springbatch),然后执行业务逻辑以将结果作为作业参数传递(您只需要一个
JobLauncher
或CommandLineJobRunner
,请参阅):
在每种情况下,您都可以使用SpringBatchItemReader
进行查询。例如,您可以将项读取器声明为侦听器的字段(不要忘记setter),并将其配置为:
<batch:listener>
<bean class="xx.xx.xx.YourListener">
<property name="reader">
<bean class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource"></property>
<property name="sql" value="${yourSQL}"></property>
<property name="rowMapper">
<bean class="xx.xx.xx.YourRowMapper"></bean>
</property>
</bean>
</property>
</bean>
</batch:listener>
2-根据上一步的结果读取表格
同样,您可以使用JobExecutionContext
在步骤之间存储和检索数据。然后,您可以实现一个StepExecutionListener
来覆盖方法beforeStep
并访问StepExecution
,这将引导您进入JobExecution
3-将表格读取结果与文件读取结果一起发送
没有“默认”CompositeItemReader
可以让您同时读取两个源,但我认为这不是您真正想要做的
对于您的情况,我将在
中将“表读取器”声明为读取器,然后声明一个自定义ItemProcessor
,它将具有另一个ItemReader
字段。此读取器将是您的FlatFileItemReader
。然后,您可以手动启动读取,并在过程方法中应用您的业务逻辑。谢谢。让我试试建议的方法,看看效果如何
@Override
public void beforeJob(JobExecution jobExecution) {
// Do your business logic and your database query here.
jobExecution.getExecutionContext().put(key, value);
}
<batch:listener>
<bean class="xx.xx.xx.YourListener">
<property name="reader">
<bean class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource"></property>
<property name="sql" value="${yourSQL}"></property>
<property name="rowMapper">
<bean class="xx.xx.xx.YourRowMapper"></bean>
</property>
</bean>
</property>
</bean>
</batch:listener>