NoSuchMethodError in Spring Batch: ItemWriter.write(java.util.List) kann nicht aufgerufen werden
Posted: 16 Jan 2025, 03:42
Hallo, ich bin neu bei Spring Batch und versuche, ein einfaches Batch-Programm zu erstellen, das Daten von einer CSV-Datei in eine andere überträgt und dabei den Namen in Großbuchstaben umwandelt. Das Lesen und Verarbeiten der Daten scheint in Ordnung zu sein, aber beim Schreiben bekomme ich einen Fehler und Ich scheine das Problem nicht zu finden
Hier sind einige Screenshots, Ergebnisse und Code
Hier sind einige Screenshots, Ergebnisse und Code
Code: Select all
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 1
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=1, name='John Smith', age=28}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'John Smith' to 'JOHN SMITH'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=1, name='JOHN SMITH', age=28}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 2
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=2, name='Sarah Johnson', age=34}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Sarah Johnson' to 'SARAH JOHNSON'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=2, name='SARAH JOHNSON', age=34}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 3
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=3, name='Michael Brown', age=45}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Michael Brown' to 'MICHAEL BROWN'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=3, name='MICHAEL BROWN', age=45}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 4
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=4, name='Emily Davis', age=31}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Emily Davis' to 'EMILY DAVIS'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=4, name='EMILY DAVIS', age=31}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 5
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=5, name='David Wilson', age=29}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'David Wilson' to 'DAVID WILSON'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=5, name='DAVID WILSON', age=29}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 6
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=6, name='Lisa Anderson', age=42}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Lisa Anderson' to 'LISA ANDERSON'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=6, name='LISA ANDERSON', age=42}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 7
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=7, name='James Taylor', age=38}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'James Taylor' to 'JAMES TAYLOR'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=7, name='JAMES TAYLOR', age=38}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 8
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=8, name='Jessica White', age=27}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Jessica White' to 'JESSICA WHITE'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=8, name='JESSICA WHITE', age=27}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 9
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=9, name='Robert Martin', age=51}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Robert Martin' to 'ROBERT MARTIN'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=9, name='ROBERT MARTIN', age=51}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Starting to process person with ID: 10
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Input Person: Person{id=10, name='Jennifer Lee', age=33}
2025-01-16 03:39:18 [main] INFO Model.PersonItemProcessor - Transformed name from 'Jennifer Lee' to 'JENNIFER LEE'
2025-01-16 03:39:18 [main] DEBUG Model.PersonItemProcessor - Transformed Person: Person{id=10, name='JENNIFER LEE', age=33}
2025-01-16 03:39:18 [main] DEBUG o.s.b.core.step.tasklet.TaskletStep - Applying contribution: [StepContribution: read=10, written=0, filtered=0, readSkips=0, writeSkips=0, processSkips=0, exitStatus=EXECUTING]
2025-01-16 03:39:18 [main] DEBUG o.s.b.core.step.tasklet.TaskletStep - Rollback for Error: java.lang.NoSuchMethodError: 'void org.springframework.batch.item.ItemWriter.write(java.util.List)'
2025-01-16 03:39:18 [main] DEBUG o.s.t.support.TransactionTemplate - Initiating transaction rollback on application exception
java.lang.NoSuchMethodError: 'void org.springframework.batch.item.ItemWriter.write(java.util.List)'
Code: Select all
org.springframework.boot
spring-boot-starter-batch
org.springframework.boot
spring-boot-starter-web
org.postgresql
postgresql
runtime
org.springframework.boot
spring-boot-starter-test
test
org.springframework.batch
spring-batch-core
4.3.8
org.springframework.batch
spring-batch-test
test
Code: Select all
id,name,age
1,John Smith,28
2,Sarah Johnson,34
3,Michael Brown,45
4,Emily Davis,31
5,David Wilson,29
6,Lisa Anderson,42
7,James Taylor,38
8,Jessica White,27
9,Robert Martin,51
10,Jennifer Lee,33
11,William Clark,44
12,Elizabeth Green,36
13,Thomas Baker,39
14,Margaret Hall,48
15,Christopher King,32
16,Patricia Wright,41
17,Joseph Scott,37
18,Susan Adams,46
19,Kevin Miller,30
20,Michelle Turner,35
Code: Select all
package Model;
public class Person {
private int id;
private String name;
private int age;
public Person() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
Code: Select all
package Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;
public class PersonItemProcessor implements ItemProcessor {
private static final Logger logger = LoggerFactory.getLogger(PersonItemProcessor.class);
@Override
public Person process(Person person) throws Exception {
if (person == null) {
logger.error("Received null person object");
return null;
}
try {
logger.info("Starting to process person with ID: {}", person.getId());
logger.debug("Input Person: {}", person);
if (person.getName() == null || person.getName().trim().isEmpty()) {
logger.warn("Person with ID {} has null or empty name", person.getId());
return person;
}
String originalName = person.getName();
person.setName(originalName.toUpperCase());
logger.info("Transformed name from '{}' to '{}'", originalName, person.getName());
logger.debug("Transformed Person: {}", person);
return person;
} catch (Exception e) {
logger.error("Error processing person with ID: " + person.getId(), e);
throw e;
}
}
}
Code: Select all