Trong câu chuyện này, tôi sẽ giải thích cho bạn cách đọc và ghi tệp Excel với Spring Batch bằng trình đọc và ghi tùy chỉnh
Chúng ta sẽ tạo một ứng dụng khởi động Spring đơn giản trình bày cách sử dụng lô Spring với mongoDB
điều kiện tiên quyết- Khởi động mùa xuân 2. 4
- maven 3. 6. 1
- Java 8
- Mông Cổ 4. 4
- Apache poi 4. 1. 2
Lô mùa xuân là thư viện Spring Framework xử lý lượng lớn dữ liệu mà không cần sự can thiệp của con người. Spring Batch có hỗ trợ các tệp CSV, XML, nhưng vốn dĩ không hỗ trợ các tệp XLSX. Nó không được thiết kế để sử dụng như một khung lập kế hoạch. Tuy nhiên, nó có thể được sử dụng kết hợp với khung lập lịch trình như Quartz, Control-M, v.v.
khuôn mẫu hàng loạt. https. // tài liệu. mùa xuân. io/spring-batch/docs/current/reference/html/job. html
Bạn có thể lưu trữ dữ liệu vào XLSX với sự hỗ trợ của Apache POI SXSSF API
Ví dụ, chúng ta sẽ tạo một công việc Spring Batch có thể nhập thông tin nhân viên từ tệp Excel. Tệp này chứa thông tin như tên, họ, số, địa chỉ email và bộ phận. Khi đọc thông tin nhân viên từ file excel, chúng ta đã chèn vào mongodb khi không tồn tại nhân viên
Mẫu excel file nhân viên
Tạo dự án khởi động mùa xuân và thêm các phụ thuộc sau vào pom. xml
org.springframework.boot
spring-boot-starter-batch
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-starter-web
org.apache.poi
poi
4.1.2
org.apache.poi
poi-ooxml
4.1.2
Cấu trúc dự ánĐây là cấu trúc dự án của chúng tôi
Để bắt đầu, chúng ta cần một lớp mô hình. Đối với hướng dẫn này, chúng tôi có một lớp mô hình Nhân viên
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors[chain = true]
@Document[collection = "employee"]
public class Employee {
@Id
private String id;
private String firstName;
private String lastName;
@NotNull
@Indexed[unique = true, direction = IndexDirection.DESCENDING]
private String number;
private String email;
private String department;
private double salary;
}
Chú thích @Document đánh dấu một lớp là một đối tượng miền mà chúng tôi muốn duy trì cơ sở dữ liệu
@Repository
public interface EmployeeRepository extends MongoRepository {
}
Apache POI là một thư viện Java cho phép đọc và ghi Microsoft Documents. Nó hỗ trợ Excel, Word, PowerPoint và cả Visio. Chúng tôi đã tạo một lớp trừu tượng chịu trách nhiệm đọc và ghi vào tệp Excel
Tạo một BatchConfiguration. java
Lớp cấu hình hàng loạt đã chú thích nó bằng @Configuration và @EnableBatchProcessing. @EnableBatchProcessing kích hoạt các tính năng Spring Batch và cung cấp cấu hình cơ sở để thiết lập các công việc hàng loạt trong lớp @Configuration
/**
* Configuration for batch
*/
@EnableBatchProcessing
@Configuration
public class BatchConfiguration {
public final JobBuilderFactory jobBuilderFactory;
public final StepBuilderFactory stepBuilderFactory;
public BatchConfiguration[JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory] {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public JobParametersValidator jobParametersValidator[] {
return new EmployeeJobParametersValidator[];
}
@Bean
public JobParametersValidator compositeJobParametersValidator[] {
CompositeJobParametersValidator bean = new CompositeJobParametersValidator[];
bean.setValidators[Collections.singletonList[jobParametersValidator[]]];
return bean;
}
@Bean
public ItemProcessor itemProcessor[] {
return new EmployeeItemProcessor[];
}
@Bean
public ItemReader itemReader[] {
return new EmployeeItemReader[];
}
@Bean
public MongoItemWriter writer[MongoTemplate mongoTemplate] {
return new MongoItemWriterBuilder[].template[mongoTemplate].collection["employee"]
.build[];
}
/**
* Declaration step
* @return {@link Step}
*/
@Bean
public Step employeeStep[MongoItemWriter itemWriter] {
return stepBuilderFactory.get["employeeStep"]
.chunk[50]
.reader[itemReader[]]
.processor[itemProcessor[]]
.writer[itemWriter]
.build[];
}
/**
* Declaration job
* @param listener {@link JobCompletionListener}
* @return {@link Job}
*/
@Bean
public Job employeeJob[JobCompletionListener listener, Step employeeStep] {
return jobBuilderFactory.get["employeeJob"]
.incrementer[new RunIdIncrementer[]]
.listener[listener]
.flow[employeeStep]
.end[]
.validator[compositeJobParametersValidator[]]
.build[];
}
}
Employee ItemReader là class tùy chỉnh cho phép chúng ta đọc nội dung của file Excel. Nó mở rộng AbstractExcelPoi và triển khai các giao diện ItemReader và StepExecutionListener. Lớp này điền vào các trường của đối tượng Nhân viên đã tạo bằng cách sử dụng lớp EmployeeItemRowMapper
EmployeeItemProcessor. java là lớp triển khai sẽ triển khai giao diện ItemProcessor
Trong trường hợp của chúng tôi, nó có trách nhiệm kiểm tra xem mã số nhân viên đã tồn tại trong cơ sở dữ liệu hay chưa trước khi chèn. Khi kết thúc công việc, nó sẽ chèn tất cả dữ liệu không lưu được vào tệp kết quả Excel để thông báo cho người dùng.
Sau khi dữ liệu được xử lý, bean ghi sẽ lưu dữ liệu vào mongoDB
Công việc của nhân viên chúng tôi được định nghĩa như sau
Lưu ý rằng chúng tôi đã thêm bean compositeJobParametersValidator[] làm trình xác thực cho phép bạn kiểm tra xem loại tệp đầu vào của công việc có ở định dạng Excel không