近期需要迁移数据库,迁移后数据库ip将会改变。我们系统使用c3p0连接池,原本以为在数据库迁移后,只需修改服务器的hosts文件,将数据库配置文件中的对应域名映射到新的ip即可。但实验后发现此方法存在问题。
可做如下实验:
实验说明即使修改hosts了文件,此后通过连接池得到的Connection仍然使用的之前的ip。通过debug,可以发现服务启动后, 在 进行第一次查询前,c3p0连接 池将会被初始化, 这时相关的配置已经加载到内存。如下图所示,在连接池初始化后, com.mchange.v2.c3p0.ComboPooledDataSource类中dmds域(类型为com.mchange.v2.c3p0.DriverManagerDataSource)的jdbcUrl的域已经被赋值, 之后即使是修改了hosts文件, ComboPooledDataSource所 新建的连接还是会使用之前的配置。这样若要不修改其它配置,最方便的方法还是在修改了hosts文件之后重启服务,从而重新初始化连接池。
可做如下实验:
- 在本机启动服务,查询正常
- 修改host文件,将数据库域名对应的ip修改为错误ip
- 重新查询,查询正常
- 拔掉本机网线后重新插上,查询正常
- 修改连接池的配置,将初始化链接数与最小链接数修改为1,重复上述实验,结果相同
实验说明即使修改hosts了文件,此后通过连接池得到的Connection仍然使用的之前的ip。通过debug,可以发现服务启动后, 在 进行第一次查询前,c3p0连接 池将会被初始化, 这时相关的配置已经加载到内存。如下图所示,在连接池初始化后, com.mchange.v2.c3p0.ComboPooledDataSource类中dmds域(类型为com.mchange.v2.c3p0.DriverManagerDataSource)的jdbcUrl的域已经被赋值, 之后即使是修改了hosts文件, ComboPooledDataSource所 新建的连接还是会使用之前的配置。这样若要不修改其它配置,最方便的方法还是在修改了hosts文件之后重启服务,从而重新初始化连接池。