Хорошо, я прочитал довольно много сообщений об этом и прочитал документацию по весенней загрузке по этому вопросу, но так и не получил ответа, который является более чистым подходом.
Вот мой вариант использования: у нас есть около 100-200 объектов оракула, и мы используем интерфейс JPARepository для их запроса. Теперь нам нужно убедиться, что read db используется для вызовов чтения, а write db должен использоваться для любых операций записи.
У нас есть приложение весенней загрузки, использующее источник данных HikariCP, и мы настроили его с помощью @EnableTransactionManagement, @EnableJpaRepositories, передавая ссылку на диспетчер сущностей, диспетчер транзакций и базовые пакеты для сканирования.
Я создал два файла конфигурации, один с ReadConfiguration и один с WriteConfiguration. Теперь проблема в том, что у нас есть код в стандартном объектно-ориентированном стиле, где у нас есть уровень сервиса и репозитория. Разные сервисы внедряют разные репозитории. Каждый интерфейс репозитория расширяет JpaRepository, и этот интерфейс автоматически подключается к множеству классов обслуживания.
Чего я хочу добиться, так это использовать тот же уровень репозитория, но каким-то образом уровень репозитория должен автоматически знать, что если это вызов для чтения, то используйте источник данных для чтения, а если это вызов для записи, используйте источник данных для записи.
Одним из решений является использование какого-либо способа взлома прокси-реализации репозитория, чтобы иметь некоторую логику, чтобы увидеть, является ли это вызовом для чтения, а затем использовать этот источник данных для чтения, если это вызов для записи, а затем использовать источник данных для записи. Кто-нибудь решил это таким способом? По сути, мне нужно перенаправить вызов на источник данных в зависимости от вызова метода. Если метод выполняет некоторую операцию чтения, мне нужно убедиться, что он использует источник данных для чтения или использует источник данных для записи.
Может ли кто-нибудь указать в каком-то направлении, как добиться такой архитектуры без написания нового уровня репозитория для чтения и записи.
Спасибо.