Я пишу многопоточную программу в serviceImpl, используя Callable interface.I использую менеджер весны транзакций. Когда операция обновления выполняется в БД, она выполнена успешно. Но обновленные данные не отражаются в БД. Но когда я запускаю программу без многопоточности, она обновляется в DB.Весенний менеджер транзакций и многопоточность
Это моя конфигурация
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
<tx:method name="find*" propagation="NOT_SUPPORTED" />
<tx:method name="get*" propagation="NOT_SUPPORTED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* *..*ServiceImpl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
я могу перейти к другому подходу к операции manager.Just я хочу, чтобы подтвердить, если этот подход поддерживает или нет многопоточности. Итак, мой вопрос: Помогает ли менеджер транзакций Spring поддерживать многопоточность (я имею в виду только объявление аннотации или XML) Почему обновленные данные не отражены в БД в моем случае? Что может быть лучшим альтернативным подходом?
Возможно ли передать активную транзакцию во второй поток? –
Я сомневаюсь. Как может транзакционный аспект узнать, завершился ли второй поток транзакцией или нет? Кто будет совершать транзакцию в конце, если метод вернется до того, как порожденный поток (или вызываемый) завершил свою работу? –
Если бы я сделал что-то подобное, я отвечал за правильную синхронизацию потоков. Может быть полезно, например, начать работу в потоке A и завершить ее в потоке B (следовательно, передать транзакцию между потоками). –