在 spring 个批处理写入器中写入多个不相关的表

Writing in multiple unrelated tables in spring batch writer

我们能否有一个 writer 在 spring 批次中同时写入 2 个不同的不相关的 tables?实际上,除了主要数据外,我还需要将一些元数据存储在不同的 table 中。我该怎么做?

请在下方查找。假设你有 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());
    }
    }