Tích hợp Spring Batch vào Spring Boot để đọc dữ liệu từ file CSV và lưu vào Database.
Donnie
2 min read
1. Thêm Dependencies
Chắc chắn đã thêm các dependency cần thiết vào pom.xml
:
<dependencies>
<!-- ... các dependency khác ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- ... -->
</dependencies>
2. Tạo Model và Repository
Tạo model User
và repository UserRepository
nếu bạn chưa có:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String address;
// getters và setters
}
public interface UserRepository extends JpaRepository<User, Long> {
}
3. Tạo Cấu Hình Spring Batch
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private UserRepository userRepository;
// Các Bean cấu hình khác
}
4. Tạo ItemReader, ItemProcessor và ItemWriter
Chúng ta đã thảo luận chi tiết về việc tạo các component này trong các câu trả lời trước, nên tôi sẽ không lặp lại ở đây.
5. Tạo Step và Job
Bổ sung vào BatchConfig
:
@Bean
public Step step1(JpaItemWriter<User> writer) {
return stepBuilderFactory.get("step1")
.<User, User> chunk(10)
.reader(reader())
.processor(new UserItemProcessor())
.writer(writer)
.build();
}
@Bean
public Job importUserJob(Step step1) {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.flow(step1)
.end()
.build();
}
6. Kích hoạt Job
CommandLineRunner
hoặc các phương pháp kích hoạt khác cho Spring Batch, bạn có thể đặt chúng trong bất kỳ lớp @Component
nào. Chẳng hạn, bạn có thể tạo một lớp mới có tên BatchJobLauncher
hoặc tương tự:
username,address
john,123 Main St
jane,456 Elm St
doe,789 Oak St
@Component
public class BatchJobLauncher implements CommandLineRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Override
public void run(String... args) throws Exception {
JobParameters params = new JobParametersBuilder()
.addString("JobID", String.valueOf(System.currentTimeMillis()))
.toJobParameters();
jobLauncher.run(job, params);
}
}
0
Subscribe to my newsletter
Read articles from Donnie directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by