2015-05-26 15 views
10

Tôi muốn một số thông tin về luồng dữ liệu trong quy trình Xử lý hàng loạt mùa xuân nhưng không tìm thấy những gì tôi đang tìm kiếm trên Internet (mặc dù some useful questions trên trang web này).Spring Batch quản lý các giao dịch (với nhiều nguồn dữ liệu có thể) như thế nào?

Tôi đang cố gắng thiết lập các tiêu chuẩn để sử dụng Spring Batch trong công ty và chúng tôi tự hỏi Spring Batch hoạt động như thế nào khi một số bộ xử lý trong một bước cập nhật dữ liệu trên các nguồn dữ liệu khác nhau.

Câu hỏi này tập trung vào một quá trình chunked nhưng cảm thấy tự do để cung cấp thông tin về các chế độ khác. Từ những gì tôi đã nhìn thấy (xin vui lòng sửa tôi nếu tôi sai), khi một dòng được đọc, nó theo toàn bộ dòng chảy (đọc, xử lý, ghi) trước khi đọc tiếp theo (trái ngược với xử lý silo). nơi người đọc sẽ xử lý tất cả các dòng, gửi chúng đến bộ vi xử lý, v.v.).

Trong trường hợp của tôi, một số bộ xử lý đọc dữ liệu (trong cơ sở dữ liệu khác nhau) và cập nhật chúng trong tiến trình, và cuối cùng người viết chèn dữ liệu vào một DB khác. Hiện tại, JobRepository không được liên kết với một cơ sở dữ liệu, nhưng đó sẽ là một cơ sở dữ liệu độc lập, làm cho mọi thứ trở nên phức tạp hơn một chút.

Không thể thay đổi mô hình này vì dữ liệu thuộc về một số lĩnh vực kinh doanh.

Giao dịch được quản lý trong trường hợp này như thế nào? Dữ liệu có được cam kết chỉ khi đoạn dữ liệu đầy đủ được xử lý không? Và sau đó, có quản lý cam kết 2 pha không? Nó được đảm bảo như thế nào? Những gì phát triển hoặc cấu hình nên được thực hiện để đảm bảo tính nhất quán của dữ liệu?

Nói chung, đề xuất của bạn sẽ như thế nào trong trường hợp tương tự?

Trả lời

2

Lô mùa xuân sử dụng lõi lò xo transaction management, với hầu hết ngữ nghĩa giao dịch được sắp xếp xung quanh một đoạn mục, như được mô tả trong phần 5.1 of the Spring Batch docs.

Hành vi giao dịch của người đọc và người viết phụ thuộc vào chính xác chúng là gì (ví dụ: hệ thống tệp, cơ sở dữ liệu, hàng đợi JMS vv), nhưng tài nguyên được cấu hình để hỗ trợ giao dịch. Cùng đi cho XA - nếu bạn làm cho các điểm cuối tài nguyên một XA tuân thủ sau đó nó sẽ sử dụng 2 giai đoạn cam kết cho nó.

Quay lại giao dịch đoạn, nó sẽ thiết lập giao dịch trên cơ sở, vì vậy nếu bạn đặt khoảng cam kết thành 5 trên một tác vụ cụ thể thì nó sẽ mở và đóng giao dịch mới (bao gồm tất cả các tài nguyên được quản lý bởi người quản lý giao dịch) cho số lần đọc được xác định (được xác định là khoảng thời gian cam kết).

Nhưng tất cả điều này được thiết lập xung quanh việc đọc từ một nguồn dữ liệu duy nhất, điều đó có đáp ứng yêu cầu của bạn không? Tôi không chắc chắn lô mùa xuân có thể quản lý một giao dịch mà nó đọc dữ liệu từ nhiều nguồn và ghi kết quả xử lý vào cơ sở dữ liệu khác trong một giao dịch duy nhất. (Trong thực tế, tôi không thể nghĩ ra bất cứ điều gì có thể làm điều đó ...)

+0

Cảm ơn câu trả lời của bạn. Chúng tôi sẽ phải đối mặt với tình hình cơ sở dữ liệu nhiều (mỗi ngành kinh doanh có DB của riêng mình và đôi khi chúng ta cần phải truy cập vào một số yếu tố kinh doanh). Đó là những yếu tố hữu ích mặc dù. – Chop

+0

vâng tôi đã suy nghĩ về điều này, bạn sẽ phải cấu trúc nó để sự kiện đến từ một nguồn duy nhất và bước quy trình có khả năng truy vấn các cơ sở dữ liệu khác nhau (sẽ xảy ra trong giao dịch đã thiết lập) và sau đó cập nhật db mục tiêu.Hoặc có thể có một cái gì đó tổng hợp các sự kiện từ các nhà sản xuất khác nhau và sau đó có một bộ xử lý duy nhất thực sự thực hiện các bản cập nhật. – stringy05

Các vấn đề liên quan