Trên documentation của Spring Batch để định cấu hình một bước, một bức tranh rõ ràng mô tả cách thức đọc và ghi được thực hiện.Tài liệu Batch Spring về bước chunk theo định hướng so với thực tế?
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
tương ứng (theo doc):
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);
Tuy nhiên khi tôi gỡ lỗi và đặt một breakpoint trong phương pháp đọc của người đọc và một breakpoint trong phương pháp xử lý của bộ xử lý tôi thấy hành vi sau:
read
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write
Vì vậy, tài liệu đó có sai không? Hoặc tôi thiếu một số cấu hình để làm cho nó hoạt động như tài liệu (không tìm thấy bất cứ điều gì ở đó).
Vấn đề mà tôi có là mỗi lần đọc consequetive bây giờ phụ thuộc vào trạng thái từ bộ xử lý. Người đọc là một tổng hợp đọc hai nguồn song song, tùy thuộc vào một mục được đọc ở một trong các nguồn chỉ có nguồn đầu tiên, thứ hai hoặc cả hai được đọc trong một thao tác đọc. Nhưng trạng thái của các nguồn cần đọc được thực hiện trong bộ xử lý. Hiện tại, giải pháp duy nhất là dành cho khoảng thời gian cam kết 1, không phải là rất tối ưu cho hiệu suất.
bạn có thể dùng thử với Trình đọc tùy chỉnh bao gồm trình đọc chuẩn và logic tùy chỉnh –
Có Tôi đã nghĩ về điều đó nhưng không phù hợp với mô hình của lô. Người đọc không chịu trách nhiệm tạo ra đầu ra. – Juru
Tôi sẽ thử nó với các bảng cơ sở dữ liệu cho các nguồn (nhập với lô đầu tiên) và đọc dữ liệu với một SQL thích hợp (lô thứ hai để xử lý nghiệp vụ) –