Keycloak对接本地PostgreSQL启动时standalone.xml解析报错求助
问题根因
你遇到的启动失败是standalone.xml配置文件存在XML格式错误导致的,具体原因有两个:
- 最核心原因是粘贴配置时带入了不可见的零宽空格字符,错误提示里的
Received non-all-whitespace CHARACTERS or CDATA event in nextTag()就是XML解析器识别到非预期字符后的报错,行号指向的就是配置中PostgreSQL驱动定义的位置,这些零宽空格肉眼无法识别,但会破坏XML结构。 - 其次KeycloakDS数据源的
<pool>节点层级缩进存在错位,也可能触发解析校验失败。
解决方案
步骤1:清理非法字符并修正数据源配置
打开standalone.xml,找到datasources节点,手动重写所有新增的配置(不要直接复制粘贴网上的片段,避免再次带入不可见字符),修正后的配置参考如下:
<datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> <!-- 修正后的KeycloakDS配置 --> <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:postgresql://10.76.106.4:5432/keycloakSQL</connection-url> <driver>postgresql</driver> <pool> <max-pool-size>20</max-pool-size> </pool> <security> <user-name>KeycloakAdmin</user-name> <password>password</password> </security> </datasource> <drivers> <!-- 清理所有不可见字符后的PostgreSQL驱动配置 --> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources>
步骤2:验证模块配置
确认以下条件都满足:
- PostgreSQL驱动jar包
postgresql-42.2.23.jar已经放在Keycloak根目录下的modules/org/postgresql/main/路径中,和你写的module.xml同目录 - PostgreSQL服务正常启动,端口5432可访问,
keycloakSQL数据库已经提前创建,KeycloakAdmin用户拥有该数据库的全部操作权限
步骤3:重启验证
保存修改后的standalone.xml,重新执行standalone.bat启动Keycloak即可。
内容的提问来源于stack exchange,提问作者gtorgersen
相关产品推荐
相关产品推荐

