在spring batch writer中写入多个不相关的表

在spring batch writer中写入多个不相关的表,spring,spring-batch,Spring,Spring Batch,我们能不能有一个writer在spring批处理中同时写入两个不同的无关表?实际上,除了主数据之外,我还需要在不同的表中存储一些元数据。我该怎么办呢?请在下面找到。假设你有3个表格要写 @Bean public CompositeItemWriter compositeWriter() throws Exception { CompositeItemWriter compositeItemWriter = new CompositeItemWriter();

我们能不能有一个writer在spring批处理中同时写入两个不同的无关表?实际上,除了主数据之外,我还需要在不同的表中存储一些元数据。我该怎么办呢?

请在下面找到。假设你有3个表格要写

@Bean
    public CompositeItemWriter compositeWriter() throws Exception {
        CompositeItemWriter compositeItemWriter = new CompositeItemWriter();
        List<ItemWriter> writers = new ArrayList<ItemWriter>();
        writers.add(firstTableWriter());
        writers.add(secondTableWriter());
        writers.add(thirdTableWriter());
        compositeItemWriter.setDelegates(writers);
        return compositeItemWriter;
    }

    @Bean
    public JdbcBatchItemWriter<YourDTO> firstTableWriter() {
        JdbcBatchItemWriter<YourDTO> databaseItemWriter = new JdbcBatchItemWriter<>();
        databaseItemWriter.setDataSource(dataSource);
        databaseItemWriter.setSql("INSERT INTO FIRSTTABLE");
        ItemPreparedStatementSetter<YourDTO> invoicePreparedStatementSetter = new FirstTableSetter();
        databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
        return databaseItemWriter;
    }

    @Bean
    public JdbcBatchItemWriter<YourDTO> secondTableWriter() {
        JdbcBatchItemWriter<YourDTO> databaseItemWriter = new JdbcBatchItemWriter<>();
        databaseItemWriter.setDataSource(dataSource);
        databaseItemWriter.setSql("INSERT INTO SECOND TABLE");
        ItemPreparedStatementSetter<YourDTO> invoicePreparedStatementSetter = new SecondTableSetter();
        databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
        return databaseItemWriter;
    }

    @Bean
    public JdbcBatchItemWriter<YourDTO> thirdTableWriter() {
        JdbcBatchItemWriter<YourDTO> databaseItemWriter = new JdbcBatchCustomItemWriter<>();
        databaseItemWriter.setDataSource(dataSource);
        databaseItemWriter.setSql("INSERT INTO THIRD TABLE");
        ItemPreparedStatementSetter<YourDTO> invoicePreparedStatementSetter = new ThirdTableSetter();
        databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
        return databaseItemWriter;
    }

    //SettterClass Example
    public class FirstTableSetter implements ItemPreparedStatementSetter<YourDTO> {
    

    @Override
    public void setValues(YourDTO yourDTO, PreparedStatement preparedStatement) throws SQLException {
        preparedStatement.setString(1, yourDTO.getMyValue());
    }
    }
@Bean
公共CompositeItemWriter compositeWriter()引发异常{
CompositeItemWriter CompositeItemWriter=新的CompositeItemWriter();
列表编写器=新建ArrayList();
add(firstTableWriter());
writers.add(secondTableWriter());
writers.add(thirdTableWriter());
compositeItemWriter.SetDelegories(编写器);
返回compositeItemWriter;
}
@豆子
公共JdbcBatchItemWriter firstTableWriter(){
JdbcBatchItemWriter databaseItemWriter=新的JdbcBatchItemWriter();
databaseItemWriter.setDataSource(dataSource);
databaseItemWriter.setSql(“插入第一个表”);
ItemPreparedStatementSetter invoicePreparedStatementSetter=new FirstTableSetter();
databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
返回databaseItemWriter;
}
@豆子
公共JdbcBatchItemWriter secondTableWriter(){
JdbcBatchItemWriter databaseItemWriter=新的JdbcBatchItemWriter();
databaseItemWriter.setDataSource(dataSource);
databaseItemWriter.setSql(“插入第二个表”);
ItemPreparedStatementSetter invoicePreparedStatementSetter=new SecondTableSetter();
databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
返回databaseItemWriter;
}
@豆子
公共JdbcBatchItemWriter thirdTableWriter(){
JdbcBatchItemWriter databaseItemWriter=新的JdbcBatchCustomItemWriter();
databaseItemWriter.setDataSource(dataSource);
databaseItemWriter.setSql(“插入第三个表”);
ItemPreparedStatementSetter invoicePreparedStatementSetter=new ThirdTableSetter();
databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
返回databaseItemWriter;
}
//SettterClass示例
公共类FirstTableSetter实现ItemPreparedStatementSetter{
@凌驾
public void setValues(YourDTO YourDTO,PreparedStatement PreparedStatement)引发SQLException{
preparedStatement.setString(1,yourDTO.getMyValue());
}
}

请使用复合编写器,它可以添加表序列,任何故障都将完全回滚。这将是一种更干净的方法,因为交易将得到完美的处理。让我知道需要代码片段Hi Rakesh,你能提供一些代码片段吗?添加在答案部分。如果您遇到任何问题,请告诉我