Concurrencia con Spring Batch
Publicado por Pablo (1 intervención) el 09/04/2021 09:31:48
Buenas!
Estoy montando un proyecto en java con spring batch.
Tengo un trabajo con un reader, un processor y un writer. La idea es recibir un fichero de entrada, dividirlo antes de hacer nada por ejemplo en 2 partes, y luego lanzar en paralelo el proceso para que tarde menos.
Tengo esto:
Y la historia que aparentemente funciona bien, porque lo hace por separado cada procesamiento. Pero el proceso me tarda lo mismo haciendolo secuencial que lanzandolo con 2 procesos en paralelo, lo cual no le veo ningún sentido.
¿Se os ocurre por qué puede ser?
Muchas Gracias, un saludo!!!!
Estoy montando un proyecto en java con spring batch.
Tengo un trabajo con un reader, un processor y un writer. La idea es recibir un fichero de entrada, dividirlo antes de hacer nada por ejemplo en 2 partes, y luego lanzar en paralelo el proceso para que tarde menos.
Tengo esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
@Bean
// @formatter:off
public Job job() {
return jobBuilderFactory.get("job")
.start(splitFlow())
.build() //builds FlowJobBuilder instance
.build(); //builds Job instance
}
@Bean
public Flow splitFlow() {
return new FlowBuilder<SimpleFlow>("splitFlow")
.split(taskExecutor())
.add(flow1(), flow2())
.build();
}
@Bean
public Flow flow1() {
return new FlowBuilder<SimpleFlow>("flow1")
.start(stepLine1())
.build();
}
@Bean
public Flow flow2() {
return new FlowBuilder<SimpleFlow>("flow2")
.start(stepLine2())
.build();
}
@Bean
public Flow flow3() {
return new FlowBuilder<SimpleFlow>("flow3")
.start(stepLine3())
.build();
}
@Bean
public Flow flow4() {
return new FlowBuilder<SimpleFlow>("flow4")
.start(stepLine4())
.build();
}
@Bean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor("spring_batch");
}
@Bean
// @formatter:off
public Step stepLine1() {
return stepBuilderFactory.get("stepLine1").listener(new GenericListener())
.<LineFile, NormalizedLine>chunk(100)
.reader(readerLineFile1())
.processor(processorLineFile1())
.writer(writerLineFile1())
.build();
}
@Bean
// @formatter:off
public Step stepLine2() {
return stepBuilderFactory.get("stepLine1").listener(new GenericListener())
.<LineFile, NormalizedLine>chunk(100)
.reader(readerLineFile1())
.processor(processorLineFile1())
.writer(writerLineFile1())
.build();
}
Y la historia que aparentemente funciona bien, porque lo hace por separado cada procesamiento. Pero el proceso me tarda lo mismo haciendolo secuencial que lanzandolo con 2 procesos en paralelo, lo cual no le veo ningún sentido.
¿Se os ocurre por qué puede ser?
Muchas Gracias, un saludo!!!!
Valora esta pregunta


0