Как связать базу данных с конфигурацией, хранящейся в основной базе данных во время выполнения в Spring Boot? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть требование, когда у меня есть одна основная БД, которая содержит конфигурацию соединений с БД различных клиентов.Когда я публикую Данные с использованием Rest API, содержащего JWT, тогда этот токен будет содержать имя клиента и на основе имени клиента, я должен получить конфигурации БД клиента из главной БД, выполнить подключение к БД и вставить данные в эту БД.

Я просмотрел различные посты вокруг него, но не смог найти ни одного конкретного примера.

В настоящее время я использую Spring Boot с данными JPA в проекте.Если у кого-нибудь есть какое-либо решение с Spring JDBC Template, я готов перенести в него свое приложение.

1 Ответ

3 голосов
/ 24 сентября 2019

Как @Jonathan Johx упомянул свое мультитенантное приложение, каждый арендатор имеет свою схему.Чтобы предоставить некоторые конкретные указания, вы можете создать специальный источник данных, который будет действовать как прокси для реальных источников данных, каждый из которых может отвечать за подключение к одной схеме.

Spring уже предоставляет AbstractRoutingDatSource для этой цели или вы можете свернуть своеПо сути, вы должны определить какой-то метод отображения ( defineCurrentLookupKey ) и поддерживать карту ключа к фактическому источнику данных, который можно обновлять в режиме реального времени в случае подключения нового источника данных.

IВы нашли Этот пост SO , который более подробно объясняет этот подход, поэтому нет причин дублировать эту информацию.

Некоторые моменты, которые следует учитывать на основе вашего вопроса:

  • Иногда новые источники данных должны регистрироваться во время выполнения
  • Возможно, стоит закрыть соединения и освободить ресурсы как на стороне вашего приложения, так и на стороне СУБД, закрыв источник данных после некоторого ttl, если никто не используетit.
  • Поскольку вы упомянули весеннюю загрузку, он может иметь проверку работоспособности привода, которая проверяет подключение базы данных, поэтому убедитесь, что он по-прежнему отвечает требованиям.Я упоминаю об этом, потому что, если он ответит кодом не-200, а вы работаете в какой-то сложной среде, которая выполняет проверки работоспособности, такие как (например, kubernetes, ecs и т. Д.), Микросервис не может считаться исправным из-за этого,так что ваши девопы могут злиться:)
...