У меня есть два задания Spring Batch: первый (задание A) считывает данные из системы CRM (через веб-службы) и записывает их в таблицу базы данных Oracle; второй (задание B) - vise verse - считывает данные из той же таблицы базы данных Oracle и отправляет ее в CRM (через веб-службы). Я использую HibernateTemplate для выполнения операций с базой данных. Способы сохранения и обновления базы данных Oracle отмечены с помощью @Transactional (распространение = распространение_REQUIRES_NEW). Эти пакетные задания работают одновременно. В какой-то момент два задания блокируют друг друга: - задание A при чтении записи из блоков базы данных Oracle, работа, которая должна считывать и отправлять данные в CRM, замерзает, и единственным действием, которое я могу сделать, является ее остановка вручную. -job B замерзает слишком, а затем бросает исключение:Весенние пакетные задания одновременно открывают блокировку базы данных
Caused by: org.hibernate.exception.LockAcquisitionException: could not execute update query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:87)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:84)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:396)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:259)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1141)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1150)
at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 60 more
Вызванный: java.sql.SQLException: ORA-00060: ТУПИК обнаружен во время ожидания ресурса
Я не знаком с Hibernate, особенно когда он работает вместе с Весной. Я понимаю, что Hibernate управляет транзакциями, но, очевидно, я ошибаюсь. Не могли бы вы посоветовать мне, где может быть причина этих замков. настройки Мои Hibernate являются:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.default_batch_fetch_size">0</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF8</prop>
<prop key="hibernate.mapping.precedence">class</prop>
<prop key="hibernate.transaction.flush_before_completion">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
</props>
</property>
Какая у вас Isolation_level? – Cygnusx1
здесь хорошая ссылка для этого: http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk – Cygnusx1
Я использую рычаг изоляции Oracle по умолчанию - прочитайте прочитанное. – user2382219