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?
Làm thế nào để làm được điều này khi sử dụng chú thích @EnableBatchProcessing? –
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(). –
@ 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