Источник данных изменяется на вторичный во время выполнения, если первичный находится в автономном режиме - PullRequest
0 голосов
/ 06 июня 2019

Мне приходится иметь дело со следующим сценарием для весеннего приложения с базой данных Oracle:

  1. Приложение Spring использует первичную базу данных. В то же время вторичная база данных хранит данные для аварийного восстановления (из первичной).

Первый шаг в настоящее время предоставляется. На данный момент я должен реализовать:

  1. Когда первичная база данных отключается, приложение должно изменить соединение с вторичной базой данных).

Реализация должна быть программной. Как я могу добиться этого без изменения кода, который существует в настоящее время? Есть ли рабочее решение (библиотека)?

Я думаю о AbstractRoutingDataSource и базах данных ping (например, каждые 5 секунд), но я не уверен в этом решении.

1 Ответ

0 голосов
/ 25 июня 2019

Итак, подведем итоги. Мне не удалось использовать Oracle RAC (Real Application Cluster). Если реализация должна быть программной, вы можете попробовать AbstractRoutingDataSource Approche.

Я реализовал таймер, который пингует текущую базу данных каждую 1 секунду (вы можете использовать запрос проверки и проверить, можете ли вы читать из базы данных ... если нет, мы предполагаем, что соединения нет, и мы можем переключить источник данных).

Благодаря этому я смог изменить источник данных во время выполнения, когда текущий источник данных находится в автономном режиме. Что более важно, это было автоматически.

С другой стороны, есть недостатки:

  • В течение короткого времени пользователь может видеть ошибки, если база данных не переключился пока.
  • Некоторая часть приложения может перестать работать, если она работает неправильно защищен от отсутствия связи с базой данных.
...