Multithreading 使用分割器的弹簧批并行处理
处理多个线程数量有限的文件,但这些文件无法正常工作。任务完成后,该线程无法重复使用。启用可将多个文件传递给数量有限的线程Multithreading 使用分割器的弹簧批并行处理,multithreading,spring-batch,Multithreading,Spring Batch,处理多个线程数量有限的文件,但这些文件无法正常工作。任务完成后,该线程无法重复使用。启用可将多个文件传递给数量有限的线程 @Bean public Step orderStep1() throws IOException { return stepBuilderFactory.get("orderStep1") .partitioner("slaveStep", partitioner()) .step(sl
@Bean
public Step orderStep1() throws IOException {
return stepBuilderFactory.get("orderStep1")
.partitioner("slaveStep", partitioner())
.step(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor1())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor1() {
ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
taskExecutor1.setCorePoolSize(30);
return taskExecutor1;
}
@Bean
@StepScope
public FlatFileItemReader<GPRSDAO> reader(
@Value("#{stepExecutionContext['file']}") String file
) {
reader = new FlatFileItemReader<GPRSDAO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName","lastName" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
return reader; }
Input files=100(set dynamically during runtime using stepExecutionContext)
@Bean
公共步骤orderStep1()引发IOException{
返回stepBuilderFactory.get(“orderStep1”)
.partitioner(“slaveStep”,partitioner())
.步骤(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor 1())
.build();
}
@豆子
公共线程池TaskExecutor TaskExecutor 1(){
ThreadPoolTaskExecutor TaskExecutor 1=新的ThreadPoolTaskExecutor();
TaskExecutor 1.setCorePoolSize(30);
返回任务执行器1;
}
@豆子
@步进镜
公共FlatFileItemReader(
@值(“#{stepExecutionContext['file']}”)字符串文件
) {
reader=新FlatFileItemReader();
setResource(新文件系统资源(文件));
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(新的DelimitedLineTokenizer(){
{
setNames(新字符串[]{“firstName”,“lastName”});
}
});
setFieldSetMapper(新的BeanRapperFieldSetMapper(){
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
返回读取器;}
输入文件=100(使用stepExecutionContext在运行时动态设置)
任务完成后,该线程不能重复使用。允许将多个文件传递给数量有限的线程
@Bean
public Step orderStep1() throws IOException {
return stepBuilderFactory.get("orderStep1")
.partitioner("slaveStep", partitioner())
.step(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor1())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor1() {
ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
taskExecutor1.setCorePoolSize(30);
return taskExecutor1;
}
@Bean
@StepScope
public FlatFileItemReader<GPRSDAO> reader(
@Value("#{stepExecutionContext['file']}") String file
) {
reader = new FlatFileItemReader<GPRSDAO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName","lastName" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
return reader; }
Input files=100(set dynamically during runtime using stepExecutionContext)
您将核心池大小设置为30,但未设置参数。您需要设置最大池大小以限制线程数
@Bean
public Step orderStep1() throws IOException {
return stepBuilderFactory.get("orderStep1")
.partitioner("slaveStep", partitioner())
.step(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor1())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor1() {
ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
taskExecutor1.setCorePoolSize(30);
return taskExecutor1;
}
@Bean
@StepScope
public FlatFileItemReader<GPRSDAO> reader(
@Value("#{stepExecutionContext['file']}") String file
) {
reader = new FlatFileItemReader<GPRSDAO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName","lastName" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
return reader; }
Input files=100(set dynamically during runtime using stepExecutionContext)
任务完成后,该线程不能重复使用。允许将多个文件传递给数量有限的线程
@Bean
public Step orderStep1() throws IOException {
return stepBuilderFactory.get("orderStep1")
.partitioner("slaveStep", partitioner())
.step(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor1())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor1() {
ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
taskExecutor1.setCorePoolSize(30);
return taskExecutor1;
}
@Bean
@StepScope
public FlatFileItemReader<GPRSDAO> reader(
@Value("#{stepExecutionContext['file']}") String file
) {
reader = new FlatFileItemReader<GPRSDAO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName","lastName" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
return reader; }
Input files=100(set dynamically during runtime using stepExecutionContext)
您将核心池大小设置为30,但未设置参数。您需要设置最大池大小以限制线程数。欢迎使用SO。根据这里的代码,看起来您在中采用了解决方案,但没有接受答案。请接受以下答案:。欢迎访问SO。根据这里的代码,看起来您在中采用了解决方案,但没有接受答案。请接受答案:。
@Bean
public Step orderStep1() throws IOException {
return stepBuilderFactory.get("orderStep1")
.partitioner("slaveStep", partitioner())
.step(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor1())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor1() {
ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
taskExecutor1.setCorePoolSize(30);
return taskExecutor1;
}
@Bean
@StepScope
public FlatFileItemReader<GPRSDAO> reader(
@Value("#{stepExecutionContext['file']}") String file
) {
reader = new FlatFileItemReader<GPRSDAO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName","lastName" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
{
setTargetType(GPRSDAO.class);
}
});
}
});
reader.close();
return reader; }
Input files=100(set dynamically during runtime using stepExecutionContext)