gpt4 book ai didi

java - Spring 批处理 - 使用 JdbcCursorItemReader 从 DataSource 读取数据并使用 ResultSet

转载 作者:行者123 更新时间:2023-12-02 11:04:29 25 4
gpt4 key购买 nike

我正在尝试使用 Spring Batch 创建一个使用数据源(之前配置)并运行查询的作业。我希望能够迭代返回的 ResultSet 以使用返回的数据创建一个新表。

我可以创建这样的阅读器,但我不知道如何迭代结果。

@Bean
public JdbcCursorItemReader<ResultSet> reader(String query, DataSource dataSource) {
JdbcCursorItemReader<ResultSet> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql(query);
return itemReader;
}

我的 ItemProcessor 应该接收什么?这个?

public class ExtractionItemProcessor implements ItemProcessor<ResultSet, String>{    
@Override
public String process(ResultSet item) throws Exception {
// transform the resultSet into a SQL INSERT
}
}

编辑:我知道查询结果的唯一方法是通过 ResultSet 元数据,因此我无法创建 POJO 并设置属性。

最佳答案

创建一个POJO类来表示一条记录,如Foo :

public class Foo {
private final long id;
// more properties

public Foo(long id // ,...) {
this.id = id;
// set other properties
}

public long getId() {
return id;
}
}

所以读者将是 JdbcCursorItemReader<Foo> .

并创建一个 RowMapper<Foo>如:

public FooRowMapper implements implements RowMapper<Foo> {

@Override
public Foo mapRow(ResultSet rs, int rowNum) throws SQLException {
long id = rs.getLong("id");
// more properties
return new Foo(id // more properties);
}
}

并将其设置在阅读器上:itemReader.setRowMapper(new FooRowMapper()) .

ExtractionItemProcessor将收到Foo ,看起来像:

public class ExtractionItemProcessor implements ItemProcessor<Foo, String>{    
@Override
public String process(Foo item) throws Exception {
int someValue = transform(foo);
return "INSERT INTO blah blah blah..." + someValue + "..."; // potentially dangerous - see SQL injection attack
}
}

更进一步,也许ExtractionItemProcessor的转变Foo应该创建一个 Bar 。那么它看起来像:

public class ExtractionItemProcessor implements ItemProcessor<Foo, Bar>{    
@Override
public Bar process(Foo item) throws Exception {
int someValue = transform(foo);
// more values....
return new Bar(someValue // more values);
}
}

那么ItemWriter实现将需要 List<Bar> ,它知道如何安全地插入 Bar到另一个表。

关于java - Spring 批处理 - 使用 JdbcCursorItemReader 从 DataSource 读取数据并使用 ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com