Spring Batch Flat File to Database Migration Example
In this tutorial, we will explore how to migrate data from a flat file to a database using Spring Batch. Spring Batch Guide provides a comprehensive overview of the framework, but in this post, we will focus on a specific use case.
Introduction
Spring Batch is a batch processing framework that provides a robust and scalable way to process large volumes of data. It is commonly used for tasks such as data migration, data integration, and data processing. In this example, we will use Spring Batch to read data from a flat file and write it to a database.
Before we dive into the example, make sure you have a basic understanding of Spring Boot Tutorials and Java Algorithms. If you are new to Spring Boot, it is recommended to start with the basics before proceeding with this tutorial.
Prerequisites
To follow this example, you will need to have the following dependencies in your project:
<dependencies>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
In this example, we will use H2 as our database. You can replace it with any other database of your choice.
Step 1: Create a Flat File
Create a flat file named `data.csv` with the following content:
name,age,city John,25,New York Alice,30,London Bob,35,Paris
This file contains three columns: `name`, `age`, and `city`.
Step 2: Create a Database Table
Create a database table named `person` with the following structure:
CREATE TABLE person (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
age INT,
city VARCHAR(255)
);
This table has four columns: `id`, `name`, `age`, and `city`.
Step 3: Create a Spring Batch Job
Create a Spring Batch job that reads data from the flat file and writes it to the database:
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Bean
public JobLauncher jobLauncher() {
return new SimpleJobLauncher();
}
@Bean
public JobRepository jobRepository() {
return new SimpleJobRepository();
}
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.driverClassName("org.h2.Driver")
.url("jdbc:h2:mem:test")
.username("sa")
.password(""
.build();
}
@Bean
public FlatFileItemReader<Person> reader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data.csv"));
reader.setLinesToSkip(1);
reader.setFieldSetMapper(new PersonFieldSetMapper());
return reader;
}
@Bean
public JdbcBatchItemWriter<Person> writer() {
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
writer.setSql("INSERT INTO person (name, age, city) VALUES (:name, :age, :city)");
writer.setDataSource(dataSource);
return writer;
}
@Bean
public Job importUserJob() {
return jobs.get("importUserJob")
.flow(step())
.end()
.build();
}
@Bean
public Step step() {
return steps.get("step")
.<Person, Person>chunk(10)
.reader(reader())
.writer(writer())
.build();
}
}
This job uses a `FlatFileItemReader` to read data from the flat file and a `JdbcBatchItemWriter` to write data to the database.
Step 4: Run the Job
Run the job using the `JobLauncher`:
public class JobRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job importUserJob;
public void run() {
JobExecution execution = jobLauncher.run(importUserJob, new JobParameters());
System.out.println("Job finished with status: " + execution.getStatus());
}
}
This will launch the job and migrate the data from the flat file to the database.
Common Mistakes
When working with Spring Batch, there are a few common mistakes to watch out for:
1. Forgetting to configure the `JobRepository`: Make sure to configure the `JobRepository` to store the job execution data.
2. Not setting the `linesToSkip` property: If your flat file has a header row, make sure to set the `linesToSkip` property to skip the header row.
3. Not using the correct `FieldSetMapper`: Make sure to use the correct `FieldSetMapper` to map the fields from the flat file to the domain object.
For more information on Mastering SQL and database design, check out our tutorial on database design principles.
Conclusion
In this tutorial, we learned how to migrate data from a flat file to a database using Spring Batch. We covered the basic configuration of Spring Batch, creating a flat file, creating a database table, and creating a Spring Batch job to migrate the data.
We also discussed some common mistakes to watch out for when working with Spring Batch. By following this tutorial, you should now have a good understanding of how to use Spring Batch to migrate data from a flat file to a database.
If you are looking for more information on More Java Tutorials or Java Interview Questions, check out our other tutorials and guides.
Remember to also follow SOLID Design Principles in Java to write clean and maintainable code.

Leave a Reply