Spring Batch là gì ?
NỘI DUNG BÀI VIẾT
Bài viết này mình sẽ giới thiệu tới mọi người một khái niệm đó là Spring Batch. Vậy Spring Batch là gì ? Cùng tìm hiểu ở bài viết này nhé
1. Một số khái niệm cơ bản
a. Batch
- Batch là gì ? Batch hay còn được gọi là Batch Processing, là chương trình thực hiện một loạt các bước mà không chịu sự can thiệp từ người dùng.
- Batch có thể được dùng để lập lịch biểu và cung cấp các tài nguyên cho phép.
b. Spring Batch
Spring Batch là một Framework xử lý batch (một chuỗi các công việc). một công việc bao gồm nhiều steps và mỗi step bao gồm một nhiệm vụ là READ-PROCESS-WRITE.
c. Mybatis
MyBatis là một class persistence framework được tạo ra để hỗ trợ cho việc sử dụng SQL, dùng để lưu trữ và nâng cao khả năng liên kết
2. Cấu trúc của Spring Batch
Cấu trúc của một Spring Batch bao gồm 4 thành phần như sau:
- JobLaucher là một Interface cho một thực thi Job thực hiện truyền tham số đầu vào .
- Job đã được định nghĩa ở trên sẽ nhận tham số truyền vào từ JobLaucher và thực thi từng bước đã được định nghĩa trong Job.
- Step được định nghĩa để điều khiển các cách thức hoạt động của batch processing. Các thành phần Step trong step bao gồm: Item Reader, Item Writer, Item Processor.
- JobRepository cung cấp CRUD cho JobLaucher, Job, Step trong quá trình thực thi.
3. Ví dụ về Spring Batch với JobRepository
a. Cài đặt thư viện
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
}
Code language: JavaScript (javascript)
Cấu hình
Cài đặt file application.properties:
spring.batch.initialize-schema=always
Tạo một class DataSourceConfiguration để cấu hình kết nối tới cơ sở dữ liệu MySQL
DataSourceConfiguration.java
package com.example.demo.configure;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfiguration {
@Bean
public DataSource dataSource(){
return DataSourceBuilder
.create()
.username("root")
.password("123456")
.url("jdbc:mysql://localhost:3306/demo-spring-batch")
.build();
}
}
Code language: JavaScript (javascript)
Cấu hình Batch bằng class BatchConfiguration.java như sau
BatchConfiguration.java
package com.example.demo.configure;
import org.springframework.batch.core.configuration.annotation.BatchConfigurer;
import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@EnableBatchProcessing
@Import({DataSourceConfiguration.class})
public class BatchConfiguration implements BatchConfigurer {
@Autowired
private DataSource dataSource;
@Override
public JobRepository getJobRepository() throws Exception {
return createNewJobRepository();
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return new DataSourceTransactionManager(dataSource);
}
@Override
public JobLauncher getJobLauncher() throws Exception {
return null;
}
@Override
public JobExplorer getJobExplorer() throws Exception {
return null;
}
public JobRepository createNewJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(getTransactionManager());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager platformTransactionManager() throws Exception {
return getTransactionManager();
}
@Bean
public JobRepository jobRepository() throws Exception {
return getJobRepository();
}
}
Code language: PHP (php)
Controller
Chúng ta tạo một controller có tên là DemoController để kiểm tra thử như sau
package com.example.demo.controller;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class DemoController {
@Autowired
private JobRepository jobRepository;
@Autowired
private DefaultBatchConfigurer defaultBatchConfigurer;
@GetMapping("/jobRepository")
@ResponseBody
public String execute() throws Exception {
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
jobParametersBuilder.addString("firstParameter", "1");
defaultBatchConfigurer.getJobRepository().createJobExecution("Quân", jobParametersBuilder.toJobParameters());
return "<h1>Batch Success</h1>";
}
}
Code language: JavaScript (javascript)
Vậy là xong chúng ta hãy cùng chạy thử và cảm nhận nhé ^^
Leave a Reply