Как указать несколько url при создании dataSource, чтобы приложение при аварии на первой базе отправляло запросы на вторую(дублирующую)?

У меня есть приложение на spring-boot, запускается как обычный jar файл. Так же использую обычный spring-boot datasource для работы с Oracle базой

На продакшене крутятся две базы, одна основная, а вторая - полностью дублирующая ее база на случай аварии. Как в datasource указать несколько url, чтобы в случае недоступности основной базы, запросы стали пробрасываться на вторую резервную базу напрямую?


Ответы (1 шт):

Автор решения: 0xdb

Укажите параметры резервной БД в строке соединения с опцией FAILOVER. В этом случае, JDBC обработает сбой подключения к первичной БД и будет пытаться подключиться к резервной.

Создайте алиас для соединения в файле конфигурации tnsnames.ora:

DB_WITH_FAILOVER = (DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = prima.host.ip_or_domain)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = secnd.host.ip_or_domain)(PORT = 1521))
        (FAILOVER = on)(LOAD_BALANCE = off)
    )
    (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = service_name)
        (FAILOVER_MODE =
            (TYPE = select)(METHOD = preconnect)(RETRIES = 180)(DELAY = 10)
        )
    )
)

И укажите этот алиас в конфигурации подключения. Или, если пользоваться tnsnames.ora нежелательно, полное описание соединения, как показано выше, в одну строку:

spring.datasource.url=jdbc:oracle:thin:@DB_WITH_FAILOVER

# OR -->

spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS= [...])))

Подробнее читать о Transparent Application Failover (TFA).

→ Ссылка