2012-03-12 12 views
5

Tôi có một ứng dụng lô + tích hợp mùa xuân.Tại sao mức cô lập mặc định của mọi phương thức (của một công việc hàng loạt mùa xuân) cho một tích hợp mùa xuân và giao dịch hàng loạt được đặt thành SERIALIZABLE?

Việc tích hợp được sử dụng để đọc tệp có bộ điều hợp kênh inboun và gọi lệnh in theo lô. Các jobRepository được định nghĩa từ: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean quản lý

Giao dịch là org.springframework.orm.jpa.JpaTransactionManager.

Khi ứng dụng bắt đầu tôi không biết tại sao nhưng tôi đọc loại kỳ lạ này của cấu hình:

[5860] [2012-03-12 17:40:47,267] D [main] [org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource] Adding transactional method [*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 
[5860] [2012-03-12 17:40:47,267] D [main] [org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource] Adding transactional method [create*] with attribute [PROPAGATION_REQUIRES_NEW,ISOLATION_SERIALIZABLE] 
[5860] [2012-03-12 17:40:47,267] D [main] [org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource] Adding transactional method [getLastJobExecution*] with attribute [PROPAGATION_REQUIRES_NEW,ISOLATION_SERIALIZABLE] 

Dường như để mặc định mỗi jobmethod được cấu hình với cô lập SERIALIZABLE, nhưng tôi đã không thiết lập nó hư không. Bất kỳ ý tưởng nào về cách đặt mức cách ly mặc định là ISOLATION_DEFAULT?

Trả lời

4

SERIALIZABLE theo mặc định để ngăn không cho cùng một cá thể công việc được thực hiện đồng thời trên 2 hoặc nhiều hộp. Bạn có thể thư giãn nếu đây không phải là mối quan tâm của bạn.

http://static.springsource.org/spring-batch/reference/html/configureJob.html#txConfigForJobRepository

Các

isolation-level-for-create 

thuộc tính điều khiển công tác tuyên truyền cho tạo * và * getLastJobExecution phương pháp

+1

Làm thế nào để làm được điều này khi sử dụng chú thích @EnableBatchProcessing? –

+1

Bạn sẽ phải cung cấp BatchConfigurer của riêng bạn trong trường hợp đó. Bạn có thể mở rộng DefaultBatchConfigurer và chỉ ghi đè lên createJobRepository(). –

+1

@ gary-russell Bạn đề nghị gì nếu chúng ta muốn ngăn chặn việc làm được thực hiện đồng thời trên 2 hoặc nhiều hộp? Giao dịch SERIALIZABLE không phải là một tùy chọn. Tôi đã xem xét các lớp sau đây, và đã xem xét ứng dụng sau đây: org.springframework.batch.core.repository.dao.JdbcJobInstanceDao.jobIncrementer – svlada