在OpenShift上创建MySQL驱动的Keycloak应用时遇连接错误
解决Keycloak连接MySQL时的NumberFormatException: "tcp:"错误
这个错误我之前部署Keycloak连接MySQL时也踩过坑,核心问题出在JDBC连接URL的格式错误上!
错误原因分析
从你的错误栈里能看到关键信息:
Caused by: java.lang.NumberFormatException: For input string: "tcp:"
MySQL驱动在尝试解析数据库连接端口时,把字符串tcp:当成了要转换为整数的端口号,这显然是不对的。这种情况一般是因为你配置的JDBC URL格式错误,误用了类似jdbc:mysql://tcp:<host>:<port>/keycloak的格式——而MySQL的JDBC URL根本不需要tcp:前缀!
具体解决步骤
结合你在OpenShift上的部署场景,按以下步骤修正:
修正JDBC URL格式
正确的MySQL JDBC URL格式应该是:jdbc:mysql://<数据库主机>:<端口>/<数据库名>?useSSL=false&characterEncoding=UTF-8在OpenShift环境中,你可以直接引用MySQL服务暴露的环境变量来拼接,比如:
jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/keycloak?useSSL=false&characterEncoding=UTF-8修改OpenShift模板配置
打开你使用的keycloak-https.json模板,找到Keycloak容器的环境变量配置部分,确保数据库相关参数正确:{ "name": "DB_VENDOR", "value": "mysql" }, { "name": "DB_URL", "value": "jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/keycloak?useSSL=false&characterEncoding=UTF-8" }, { "name": "DB_USER", "value": "keycloak" }, { "name": "DB_PASSWORD", "value": "password" }重点检查
DB_URL,一定要去掉错误的tcp:前缀。重新部署Keycloak
删除之前失败的部署,用修改后的模板重新创建Keycloak实例,应该就能正常连接MySQL了。
额外注意事项
- 你使用的
jboss/keycloak:4.8.1.Final镜像已经包含了MySQL驱动,不需要额外添加; - 如果还是有连接问题,可以检查MySQL服务是否在OpenShift内部正常可达,比如通过
oc rsh进入Keycloak容器,尝试用telnet ${MYSQL_SERVICE_HOST} ${MYSQL_SERVICE_PORT}测试连通性。
内容的提问来源于stack exchange,提问作者Altay Hunoğlu
相关产品推荐
相关产品推荐

