Как выполнять простые транзакции Spring JDBC вне контейнера IoC?
-
05-09-2019 - |
Вопрос
Проект, над которым я работаю, использует прямой доступ к данным JDBC во всей его шаблонной красе и не использует никаких транзакций.Я чувствую, что использование транзакций и упрощение способа написания методов доступа к данным важно, особенно с учетом того, что в настоящее время вносятся некоторые изменения.Проект существует уже довольно давно и не подходит для фреймворка ORM.Он также использует много одиночек (тьфу), и распутать его, чтобы сделать его способным использовать внедрение зависимостей, было бы изрядным объемом работы, и я не думаю, что смог бы убедить кого-либо, что мы должны сделать это сейчас.
Мне нравится интерфейс Spring JDBC, в частности, благодаря его SimpleJdbcTemplate
.Мой вопрос заключается в том, как включить некоторые простые транзакции (для каждого запроса сервлета) для этого, без необходимости устанавливать что-либо программно в каждом методе доступа к данным или с использованием контейнера Spring IoC или AOP.Я поиграл со своей собственной архитектурой, которая в итоге получила интерфейс, похожий на SimpleJdbcTemplate
's и может использовать один запрос-локальное соединение и транзакцию, когда вызовы к нему выполняются в контексте запроса (через ServletRequestListener
с помощью ThreadLocal
).Кажется, это работает хорошо, но я думаю, что использование хорошей внешней библиотеки, такой как Spring JDBC, было бы предпочтительнее.
У кого-нибудь есть какой-нибудь опыт в этом?
Решение
Возможно, вы могли бы использовать Шаблон транзакции и Обратный вызов транзакции как описано в Программное Управление Транзакциями?
Другие советы
Spring обрабатывает транзакции для вас декларативно, не беспокоясь о написании классов AOP.Если вы используете JDK 5 или выше и Spring 2.5, у вас это будет еще лучше с аннотации.
Я бы не согласился с транзакциями для каждого сервлета.У вас должен быть уровень обслуживания, который является частью приложения, которая знает о единицах работы.Контроллеры вызывают службы, которые обрабатывают транзакции.