2015-07-24 15 views
11

Tôi có một chương trình đơn giản làm việc với Trình đọc đầu vào hàng loạt Spring, Writer. Mục đích của chương trình là đọc một tệp csv đơn giản.Cấu hình khoảng thời gian cam kết của Spring Batch không hoạt động

Tôi đã đặt commit-interval thành 5. Tệp csv chỉ có 5 bản ghi nhưng vì lý do nào đó, Nhà văn được gọi 3 lần mặc dù commit-interval được đặt thành 5. Tôi hy vọng rằng người viết sẽ chỉ được gọi một lần dựa trên sự hiểu biết của tôi rằng người đọc mục và bộ xử lý sẽ đọc từng dòng mục theo từng dòng và sau đó người viết sẽ xử lý tất cả 5 cùng một lúc. Tôi đoán tôi không rõ ràng về tác động của khoảng thời gian cam kết. Bất kỳ lời khuyên nào?

+0

Lý do cho câu hỏi của tôi là tôi có một triệu bản ghi mà tôi có thể phải đọc và chuyển sang bước tiếp theo bằng cách sử dụng bộ sưu tập Java. Bây giờ khi tôi cố đọc từ một tệp nhỏ chỉ đoạn cuối cùng có số bằng nhau đến cam kết-linterval quy định được chuyển đến bước tiếp theo bằng cách sử dụng StepExecution.Các bản ghi trước đó không được thông qua. Làm thế nào tôi có thể đảm bảo rằng tất cả các hồ sơ được thông qua. Sẽ thay đổi trợ giúp cam kết khoảng thời gian? Hoặc là có cách tiếp cận khác? – user5053360

+0

Tôi đang sử dụng ExecutionContext và ExecutionContextPromotionListener cho điều này.Nhưng chỉ đoạn cuối cùng bằng với khoảng thời gian cam kết được thiết lập và đọc trong bước tiếp theo. – user5053360

+2

Vui lòng chia sẻ tệp cấu hình. Tôi muốn biết loại 'reader',' writer' và 'processor' mà bạn đang sử dụng. – SyntaX

Trả lời

0

Tôi nghĩ bạn nên có cái gì đó như:

<job id="stepJob"> 
    <step id="step1"> 
     <tasklet> 
      <chunk reader="inputReader" writer="outputWriter" commit-interval="5"/> 
     </tasklet> 
    </step> 
</job> 

Các mảnh cuối cùng của bước dụ là thẻ đoạn mà chúng ta định nghĩa những gì một đoạn là cho bước. Thuộc tính khoảng thời gian cam kết được đặt ở mức 5 trong ví dụ, có nghĩa là không có bản ghi nào sẽ được ghi cho đến khi 5 bản ghi được đọc và xử lý.

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