应用程序是springboot技术栈开发的。
使用tomcat-jndi数据源,连接池使用的tomcat-jdbc-pool
url里面配置的数据库地址是一个域名,解析地址为深圳的一个IP。(暂且称为IP-A)
现在想在线把域名解析到杭州的一套数据库IP上。(暂且称为IP-B)
那么问题来了:
因为用的连接池,数据库连接应该是长连接,在IP-A可用的情况,连接怎么才能去IP-B呢?
因为连接池里的连接已经和IP-A建立了,即使域名解析换了,是不是也无法切换到B库上?
有没有办法让数据库里的连接都重新连接一遍?或者连接池有没有智能化到识别域名解析变化并主动重连?
有一个限制:不能重启应用、容器、集群等。
回答:
这个需要好好分析一下,数据库连接使用的是域名。
但实际连接时走的是TCP/IP协议,经过DNS解析后,就跟域名没有关系了。
数据库连接池一般会有最小活跃数和最大活跃数。DNS改变后,只有新发起的连接才会连接IP-B,历史存在的都是IP-A。
不重启,只能是所有的数据库连接都关闭,然后又重新连接。
