You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目连接PostgreSQL时自动使用系统用户名而非配置指定值导致密码认证失败

Spring项目连接PostgreSQL时自动使用系统用户名而非配置指定值导致密码认证失败

看起来你遇到了一个挺让人困惑的问题:明明在配置里设置了数据库密码,Spring项目却偏偏用你系统的用户名andrew去连接PostgreSQL,导致密码认证失败,而且测试连接明明是好的,这确实挺闹心的。

问题根源分析

Spring Boot的DataSource自动配置有个默认行为:如果没有显式指定spring.datasource.username,它会自动取当前运行程序的系统用户名(也就是你的用户名andrew)。你目前的application.properties只配置了密码和数据库名,缺少用户名的明确配置,这就是为什么项目会用系统用户名去连接数据库,进而触发密码认证失败的原因。

至于你说测试连接能通过,大概率是测试连接时你手动填写了正确的数据库用户名和密码,但项目运行时完全依赖Spring的自动配置逻辑,所以才出现这种“测试通、运行崩”的不一致情况。

具体解决方案

1. 补全数据库核心配置项

在你的application.properties里添加缺失的用户名配置,同时确保数据库连接URL完整:

spring.datasource.name=postgres
# 明确指定PostgreSQL用户名(从进程看你的PostgreSQL是postgres用户运行的,所以这里填postgres即可)
spring.datasource.username=postgres
spring.datasource.password=123
# 补全数据库连接URL,指向正确的本地PostgreSQL实例
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres?useSSL=false&serverTimezone=UTC
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

2. 确保配置生效的后续操作

  • 清理IDEA的缓存(File -> Invalidate Caches... -> Invalidate and Restart),重启项目
  • 可以尝试重启PostgreSQL服务,避免旧的连接状态干扰
  • 再次运行项目,观察是否还出现用户名认证失败的错误

补充说明

你提到“其他项目没这问题”,大概率是那些项目里要么明确配置了spring.datasource.username,要么在数据库连接URL里通过user参数指定了用户名,所以没触发Spring的默认系统用户名逻辑。


备注:内容来源于stack exchange,提问作者Andrei Solodukhin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:43:02