前言:最近项目上要把geosever部署在linux上然后连接mysql,但是连接mysql的时候总是报错 Cannot create PoolableConnectionFactory,折腾了一天总算解决了,这里记录一下。
如前面所言,这事真有点灵异事件的意思了,我用windows系统上的geoserver可以成功连接mysql数据库,怎么用linux上的geoserver就不行了呢?几经baidu都没有搜索到答案,只好换用google来看,结果还真给我找到了,这里不得不说google是真的牛皮。
我们遇到的问题是这样的:
Cannot create PoolableConnectionFactory,翻译过来就是无法创建连接池工厂。对于这一个错误,可以参考这个链接
点我跳转,原来linux上的geoserver默认是使用的SSL协议来连接的mysql,如果想禁用SSL,则在geoserver的连接数据库的页面中,在数据库的名称后,加上?useSSL=false
如:
我们知道java中连接mysql的应该这么传参:
jdbc:mysql://hostname/ databaseName
当我们在加了?useSSL=false以后,参数就变成了
jdbc:mysql://hostname/ databaseName?useSSL=false
这样一来,我们就可以正确的连接到mysql了。
上面的链接中还给出了另一种解决办法,即将连接字符串改成:
jdbc:mysql://hostname/ databaseName?
enabledTLSProtocols=TLSv1.2
相应的,我们只需要在geoserver的页面中,在数据库名称后跟上
?enabledTLSProtocols=TLSv1.2
就行了,geoserver在后台拼接的时候,会自动把它拼接好的。
总结:虽然我们最终解决了在linux上使用geoserver连接mysql的问题,但是还有一个问题没有弄明白,那就是为什么在windows上geoserver不用做任何多余设置就可以直接连接,而在linux上需要禁用SSL协议,难道windows上使用的是TLS协议吗?答案有待后续和读者共同验证。