Я отрывал свои волосы тем, что должно быть довольно распространенным вариантом использования для веб-приложения. У меня есть приложение Spring-загрузка, который использует REST Хранилище, JPA и т.д. Проблема заключается в том, что у меня есть два источника данных:Весенняя загрузка с источником данных на основе сеанса
- Встроенного источник данных H2 информация об аутентификации, содержащего пользователя
- источника данных MySQL для фактических данных, специфичен для аутентифицированного пользователя
Поскольку второй источник данных специфичен для аутентифицированного пользователя, я пытаюсь использовать AbstractRoutingDataSource для маршрутизации к правильному источнику данных в соответствии с Основным пользователем после аутентификации.
Что абсолютно сводит меня с ума, так это то, что Spring-Boot борется со мной зубами и гвоздями, чтобы создать этот источник данных при запуске. Я пробовал все, о чем я могу думать, включая аннотации Lazy и Scope. Если я использую область сеанса, приложение выдает ошибку об отсутствии сеанса, существующего при запуске. @Lazy вообще не помогает. Независимо от того, какие аннотации я использую, база данных создается при запуске Spring Boot и не находит никакого ключевого ключа поиска, который по существу сбой всего приложения.
Другая проблема заключается в том, что API-хранилище репозитория имеет IMO - ужасное средство указания фактического источника данных, который будет использоваться. Если у вас несколько источников данных с Spring Boot, вы должны жонглировать аннотации Квалификатора, которые представляют собой кошмар отладки во время выполнения.
Любой совет будет очень признателен.
Что происходит, так это то, что вторая Spring-Boot инициализирует встроенный источник данных (не ленив), он сканирует и находит другой источник данных. EntityManager запутывается, потому что во время сканирования обнаружено несколько источников данных, и хотя они имеют разные квалификаторы, он не знает об этом и выдает ошибку о нескольких доступных источниках. Однако, если я использую Первичную аннотацию для указания, это также отменяет любые попытки @Lazy init и Spring-Boot немедленно инициировать Первичный. – robross0606
Я не думаю, что '@ Primary' и' @ Lazy' несовместимы или что-то еще. Но я не совсем уверен, что вы пытаетесь сделать. Может быть, если вы создадите небольшой проект с 2 'DataSources' и JPA, а не что-то еще, и вставьте ссылку здесь, кто-то может попробовать и проверить, что вам нужно. –
Я подготовлю проект. Однако мне нужен проект Spring-Boot с двумя базами данных. Одно соединение сразу доступно. Другой источник данных «Маршрутизация» должен быть создан только и использоваться с областью сеанса ПОСЛЕ ПОЛЬЗОВАНИЯ пользователем. Я должен отметить, что это работает отлично с регулярной весной, но полностью увязано с Spring-Boot, потому что это SO-намерение для автоматической конфигурации ВСЕГО. – robross0606