Почему уровень изоляции по умолчанию для каждого метода (пакетного задания Spring) для интеграции Spring и пакетной транзакции установлен на SERIALIZABLE?

У меня есть весенняя интеграция + пакетное приложение.

Интеграция используется для чтения файла с помощью адаптера внутреннего канала и вызова пакетного задания. JobRepository определяется из: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean

Диспетчер транзакций - org.springframework.orm.jpa.JpaTransactionManager.

Когда приложение запускается, я не знаю почему, но я прочитал эту странную конфигурацию:

[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]

Кажется, что по умолчанию каждый метод задания настроен с изоляцией SERIALIZABLE, но я нигде не устанавливал ее. Есть идеи, как установить уровень изоляции по умолчанию как ISOLATION_DEFAULT?


person Massimo Ugues    schedule 12.03.2012    source источник


Ответы (1)


По умолчанию это SERIALIZABLE, чтобы предотвратить одновременное выполнение одного и того же экземпляра задания на 2 или более блоках. Вы можете расслабиться, если это вас не беспокоит.

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

В

isolation-level-for-create

атрибут управляет распространением для методов create * и getLastJobExecution *

person Gary Russell    schedule 12.03.2012
comment
Как это сделать при использовании аннотации @EnableBatchProcessing? - person Hendy Irawan; 22.08.2013
comment
В этом случае вам нужно будет предоставить свой собственный BatchConfigurer. Вы можете расширить DefaultBatchConfigurer и просто переопределить createJobRepository (). - person Michael Minella; 22.08.2013
comment
@ gary-russell Что вы порекомендуете, если мы хотим предотвратить одновременное выполнение экземпляра задания на 2 или более блоках? Транзакция SERIALIZABLE не является вариантом. Я изучал следующий класс и смотрел на следующее приложение: org.springframework.batch.core.repository.dao.JdbcJobInstanceDao.jobIncrementer - person svlada; 03.12.2015