2013-06-18 3 views
0

У меня есть два задания 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> 
+0

Какая у вас Isolation_level? – Cygnusx1

+0

здесь хорошая ссылка для этого: http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk – Cygnusx1

+0

Я использую рычаг изоляции Oracle по умолчанию - прочитайте прочитанное. – user2382219

ответ

0

Ok, сначала вы должны быть в состоянии найти журнал трассировки в оракула для этого тупика. вы, вероятно, увидите, что именно вызывает тупик.

см this thread

Тупик может и будет происходить независимо от настройки вы примерить на уровне транзакций! Вам, вероятно, придется пересмотреть логику вашей партии, а тот факт, что запуск их параллельно может привести к большему количеству оружия, тогда это хорошо.

в вашем случае, работа A и работа B, вероятно, будут бороться, чтобы заблокировать одну и ту же запись в базе данных оракула.

Удача

 Смежные вопросы

  • Нет связанных вопросов^_^