SpringBoot+MyBatis+UCP 实现多数据源切换

防火墙配置

Oracle数据库端默认ONS TCP端口是 6200。应用部署的机器需要能够访问数据库节点的6200端口。可以运行 telnet检查一下: telnet <数据库IP> 6200

组件版本信息

SpringBoot

spring-boot-starter-xxx

2.1.7

MyBatis

mybatis-spring-boot-starter

2.1.4

Dynamic Datasource

dynamic-datasource-spring-boot-starter

3.6.1

UCP

ojdbc8-production

21.9.0.0

… …



UCP POM配置


UCP连接池配置方法

此项目中使用的是SpringBoot 2.1.x版本,需要手工创建UCP数据源。方法如下:

首先创建一个UCPDataSource.java的配置类 (类名可随意)。实现非常简洁,就是指定UCP在配置文件中的配置项,以及创建UCP实例。

如下截图中,创建了两个UCP数据源:ncmsobs和ncmsccs,然后将它们加入了Dynamic Datasource的数据源列表中,并指定ncmsobs为主数据源:

对应的配置文件(application.properties)如下 (注意不要再包含dynamic了,即不要再指定成spring.datasource.dynamic.xxx这个格式了,避免造成混淆):

如此,在代码中就可以实现不同的类/方法使用不同的数据源了,如:



注意,如果需要实现当数据库节点切换时对应用是透明的 (即透明应用连续性特性,又即Transparent Application Continuity,简称 TAC),URL中指定的服务名需要指定为是具有TAC属性的服务:

-- URL注意事项:
-- DB端创建具有TAC属性服务srv_tac:
srvctl add service -db orcl_icn1s6 -pdb pdb1 -service srv_tac -preferred orcl1 -available orcl2 -failover_restore AUTO -failoverretry 1 -failoverdelay 3 -commit_outcome TRUE -failovertype AUTO -replay_init_time 600 -retention 86400 -notification TRUE -drain_timeout 300 -stopoption IMMEDIATE

-- 用下面URL(注意要用scan,以及上面创建好的服务srv_tac):
url=jdbc:oracle:thin:@(DESCRIPTION = (CONNECT_TIMEOUT=120) (RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=rac-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = srv_tac)))

-- 可以用sqlplus测试连通性:
sqlplus user_name/'user_password'@'(DESCRIPTION = (CONNECT_TIMEOUT=120) (RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=rac-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = srv_tac)))'

以上就完成了UCP在SpringBoot 2.1.x中的配置。


附DB端模拟节点故障的方法:

--------------------------------

- 测试DB相关命令:

--------------------------------

--查看服务(srv_tac)以及DB状态:

srvctl status database -thishome -verbose


--模拟节点故障: 在服务srv_tac所运行的节点上,找到pmon进程ID并kill。

ps -ef | grep -i pmon

kill pmon进程ID


--再次查看服务(srv_tac)以及DB状态:

srv_tac所在节点会停止,然后又会重新启动。

服务srv_tac会自动转到另一个节点.


--测试完后,可以用下面命令再把服务srv_tac relocate回先前节点:

srvctl relocate service -db orcl_icn1s6 -oldinst orcl2 -newinst orcl1

展开阅读全文

页面更新:2024-04-30

标签:数据源   节点   端口   属性   进程   故障   命令   数据库   测试   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top