如何解决HikariPool初始化时的用户名或密码错误问题
问题
在Spring Boot(v3.1.4)单元测试启动过程中,遇到以下异常:
HikariPool-1 - Exception during pool initialization.
org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password
配置如下:
spring: flyway: enabled: false datasource: url: jdbc:h2:mem:testdb driverClassName: org.h2.Driver username: sa password: h2: console: enabled: true path: /h2-console jpa: database: h2 show-sql: true hibernate: ddl-auto: create-drop properties: hibernate: connection: url: "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;NON_KEYWORDS=key" dialect: org.hibernate.dialect.H2Dialect
Hibernate能自动创建部分表,但之后出现上述异常,请问缺少哪些配置?
解决方案
问题出在重复配置数据库连接信息,导致HikariCP与Hibernate的连接配置不一致:
- HikariCP使用
spring.datasource下的配置初始化连接池,但你给Hibernate单独配置了hibernate.connection.url,却未同步设置用户名和密码,引发认证冲突。
按以下步骤修复:
移除Hibernate单独配置的连接URL
删除spring.jpa.properties.hibernate.connection.url这一行,Spring Boot会自动将统一的DataSource实例传递给Hibernate,无需单独配置连接地址。合并连接参数到DataSource配置
把原Hibernate连接URL中的参数(DB_CLOSE_DELAY=-1;NON_KEYWORDS=key)合并到spring.datasource.url中,确保连接参数统一:
spring: datasource: url: "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;NON_KEYWORDS=key"
- 显式设置空密码
为避免配置解析歧义,将spring.datasource.password显式设为空字符串:
spring: datasource: password: ""
修复后的完整配置:
spring: flyway: enabled: false datasource: url: "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;NON_KEYWORDS=key" driverClassName: org.h2.Driver username: sa password: "" h2: console: enabled: true path: /h2-console jpa: database: h2 show-sql: true hibernate: ddl-auto: create-drop properties: hibernate: dialect: org.hibernate.dialect.H2Dialect
调整后HikariCP与Hibernate将共用同一套连接配置,连接池初始化时就能正常完成认证,单元测试可正常启动。
内容的提问来源于stack exchange,提问作者sge
相关产品推荐
相关产品推荐

