Как указать несколько url при создании dataSource, чтобы приложение при аварии на первой базе отправляло запросы на вторую(дублирующую)?
У меня есть приложение на spring-boot, запускается как обычный jar файл. Так же использую обычный spring-boot datasource для работы с Oracle базой
На продакшене крутятся две базы, одна основная, а вторая - полностью дублирующая ее база на случай аварии. Как в datasource указать несколько url, чтобы в случае недоступности основной базы, запросы стали пробрасываться на вторую резервную базу напрямую?
Ответы (1 шт):
Укажите параметры резервной БД в строке соединения с опцией 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).