Spring Boot项目中Oracle主备库(不同服务名)故障转移配置
Spring Boot Oracle主备库(不同服务名)故障转移连接配置
当主库部署在服务器A、备库在服务器B且两者服务名不同时,需要通过Oracle TNS多描述符配置实现故障转移,核心是使用DESCRIPTION_LIST为每个服务器单独指定地址和对应服务名,替代原示例中统一服务名的配置。
正确的JDBC URL配置示例
SPRING_DATASOURCE_URL=jdbc:oracle:thin:@(DESCRIPTION_LIST=(FAILOVER=YES)(LOAD_BALANCE=NO)(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器A地址)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=主库服务名)))(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器B地址)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=备库服务名))))
配置参数说明
DESCRIPTION_LIST:包裹多个独立的数据库连接描述,每个描述对应一台服务器的地址和专属服务名FAILOVER=YES:开启故障转移机制,主库连接中断时自动尝试连接备库LOAD_BALANCE=NO:主备架构下关闭负载均衡,优先连接主库,仅在主库故障时切换到备库(读写分离场景可设为YES)- 每个
DESCRIPTION块:分别对应服务器A(主库)和服务器B(备库),包含各自的TCP连接地址及对应的SERVICE_NAME CONNECT_DATA:指定对应服务器的数据库服务名,需严格匹配主、备库各自的服务名
Spring Boot完整配置示例
在application.properties中添加如下配置:
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION_LIST=(FAILOVER=YES)(LOAD_BALANCE=NO)(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器A)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORA_MAIN)))(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器B)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORA_STANDBY)))) spring.datasource.username=db_user spring.datasource.password=db_password spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
注意事项
- 使用
ojdbc8及以上版本的Oracle JDBC驱动,避免版本过低导致的TNS配置兼容性问题 - 故障转移测试:手动停止主库服务,验证应用是否自动切换至备库连接
- 可根据业务需求调整
FAILOVER_MODE参数,例如TYPE=SESSION表示会话级故障转移,TYPE=SELECT支持查询级故障转移
内容的提问来源于stack exchange,提问作者pxq
相关产品推荐
相关产品推荐

