Spring @Async и AbstractRoutingDataSource

Я с большим успехом использовал AbstractRoutingDataSource , но столкнулся с проблемой, которую не могу решить: когда я запускаю асинхронный метод, используя @ Async , он теряет контекст локального потока, и я не могу понять, где установить переключатель контекста базы данных. Обычно я делаю это в аспекте или в HandlerInterceptor , но @Async не проходит ни по одному из этих обычных маршрутов. Есть ли перехватчик или что-то подобное, что я могу настроить для запуска в начале и в конце асинхронного вызова, чтобы я мог установить контекст базы данных?

Обнаружил аналогичный вопрос на досках сообщений Spring. Однако ответа нет: http://forum.springsource.org/showthread.php?83792-Async-annotated-method-hanging-on-session-scoped-bean

РЕДАКТИРОВАТЬ: Я отладил выполнение поток, а источник AbstractRoutingData фактически вызывается в асинхронном потоке, но он вызывается до вызова аспекта, поэтому DataSource уже установлен в сеансе Hibernate перед устанавливается значение ThreadLocal .Если посмотреть на исходный код для AsyncExecutionInterceptor , который поддерживает @Async , это связано с тем, что перехватчик возвращает значение Order как HIGHEST_PRECEDENCE , поэтому его увольнение прежде всего.

enter image description here

6
задан atrain 10 October 2011 в 19:32
поделиться