Keycloak默认配置启动失败求助(Windows 11环境)
问题定位
启动日志出现以下错误,说明Keycloak无法获取数据库连接完成初始化:
2024-05-29 13:22:45,533 WARN [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] (JPA Startup Thread) HHH000342: Could not obtain connection to query metadata: java.sql.SQLException: Acquisition timeout while waiting for new connection....Caused by: java.util.concurrent.TimeoutException
dev模式下Keycloak默认使用H2嵌入式数据库,该问题多由权限、数据库文件损坏或连接池配置导致。
解决步骤
检查H2数据库目录权限
Keycloak默认将H2数据库文件存放在C:\keycloak\data\h2,确保当前用户对该目录拥有读写权限:右键目录→属性→安全→添加当前用户并赋予完全控制权限。调整连接池超时配置
在C:\keycloak\conf目录下新建或编辑application.properties文件,添加以下配置:quarkus.datasource.jdbc.url=jdbc:h2:file:./data/h2/keycloak;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE quarkus.datasource.jdbc.max-acquire-timeout=30s quarkus.datasource.jdbc.min-size=2延长连接获取超时时间,同时设置最小连接数,避免启动时连接池初始化过慢。
清理损坏的H2数据库文件
删除C:\keycloak\data\h2下的所有文件,重新执行启动命令,Keycloak会自动重建干净的数据库实例。以管理员身份执行启动命令
右键DOS窗口图标→选择「以管理员身份运行」,再执行启动命令:C:\keycloak\bin\kc.bat start-dev --http-port 8180 --log=file --log-file=C:\keycloak\logs\root-log.log
内容的提问来源于stack exchange,提问作者saket gupta

