gpt4 book ai didi

java - Spring Batch如何在写入步骤之前处理数据列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:58 25 4
gpt4 key购买 nike

我正在尝试从数据库中读取客户端数据并将处理后的数据写入平面文件。但是我需要在写入数据之前处理 ItemReader 的整个结果。

例如,我正在从数据库行读取客户端:

public class Client {
private String id;
private String subscriptionCode;
private Boolean activated;
}

但我想计算并写出有多少用户被激活,按订阅代码分组:

public class Subscription {
private String subscriptionCode;
private Integer activatedUserCount;
}

我不知道如何使用 ItemReader/ItemProcessor/ItemWriter 执行此操作,你能帮我吗?

批量配置:

@CommonsLog
@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
public class BatchConfiguration {

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Client, Client> chunk(1000)
.reader(new ListItemReader<Client>(new ArrayList<Client>() { // Just for test
{
add(Client.builder().id("1").subscriptionCode("AA").activated(true).build());
add(Client.builder().id("2").subscriptionCode("BB").activated(true).build());
add(Client.builder().id("3").subscriptionCode("AA").activated(false).build());
add(Client.builder().id("4").subscriptionCode("AA").activated(true).build());
}
}))
.processor(new ItemProcessor<Client, Client>() {
public Client process(Client item) throws Exception {
log.info(item);
return item;
}
})
.writer(new ItemWriter<Client>() {
public void write(List<? extends Client> items) throws Exception {
// Only here I can use List of Client
// How can I process this list before to fill Subscription objects ?
}
})
.build();
}

@Bean
public Job job1(Step step1) throws Exception {
return jobBuilderFactory.get("job1").incrementer(new RunIdIncrementer()).start(step1).build();
}
}

主要应用:

public class App {
public static void main(String[] args) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException {
System.exit(SpringApplication.exit(SpringApplication.run(BatchConfiguration.class, args)));
}
}

最佳答案

如果我从您的评论中了解到您需要对激活的帐户进行总结,对吗?
您可以为正在处理的每个 Client 创建一个 Subscription,并使用 ItemWriterLister.afterWrite将上面创建的订阅项写入数据库。

关于java - Spring Batch如何在写入步骤之前处理数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313876/

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