Spring Boot 3.5.15连接Docker中PostgreSQL时密码认证失败
Spring Boot 3.5.15 连接Docker PostgreSQL 16 密码认证失败排查方案
你遇到的问题是命令行能正常连接PostgreSQL,但Spring Boot始终报FATAL: password authentication failed for user "attendance",以下是几个高概率的排查方向:
1. 确认Spring Boot实际加载的配置参数
有时候配置文件的内容不一定是程序实际读取的,比如DevTools缓存、优先级更高的配置源覆盖。
- 打印加载的配置值:在项目中添加一个启动时的配置检查类,直接输出实际读取的用户名和密码:
@Component public class ConfigDebugger implements ApplicationRunner { @Autowired private Environment environment; @Override public void run(ApplicationArguments args) { System.out.println("实际读取的数据库用户名:" + environment.getProperty("spring.datasource.username")); System.out.println("实际读取的数据库密码:" + environment.getProperty("spring.datasource.password")); } }
启动项目后看控制台输出,确认是否和你配置的attendance一致。
- 查看Hikari连接池日志:你已经开启了
logging.level.com.zaxxer.hikari=DEBUG,启动时会输出连接池初始化的参数,重点看username和password字段是否正确。
2. 检查IntelliJ运行配置的环境变量
IntelliJ的Run/Debug Configurations中设置的环境变量优先级高于application.properties,可能无意中覆盖了数据库密码:
- 打开IntelliJ的「Run」→「Edit Configurations...」
- 找到你的Spring Boot启动配置,切换到「Environment」标签
- 检查是否有
spring.datasource.password相关的变量,如果有,删除或者改成正确值。
3. 排查PostgreSQL认证方式兼容性
Docker版PostgreSQL 16默认使用scram-sha-256认证方式,虽然Spring Boot 3.5.15配套的PostgreSQL驱动应该支持,但可以临时测试排除:
- 进入PostgreSQL容器:
docker exec -it postgres bash
- 修改
pg_hba.conf文件(注意路径):
echo "host all all 127.0.0.1/32 trust" >> /var/lib/postgresql/data/pg_hba.conf
- 重启PostgreSQL服务:
pg_ctl -D /var/lib/postgresql/data restart
此时Spring Boot不需要密码就能连接,如果能成功,说明是认证方式或密码哈希的问题,再改回scram-sha-256并重新设置用户密码:
ALTER USER attendance WITH PASSWORD 'attendance';
4. 解决DevTools缓存问题
Spring Boot DevTools的缓存可能导致配置未更新:
- 执行Maven清理命令:
mvn clean install - 重启IntelliJ并执行「File」→「Invalidate Caches...」→ 勾选「Clear file system cache and local history」后重启
- 临时关闭DevTools:在
application.properties添加spring.devtools.restart.enabled=false,重启项目测试
5. 调整JDBC URL参数
尝试在JDBC URL中添加sslmode=disable,避免因SSL配置导致的认证失败:
spring.datasource.url=jdbc:postgresql://localhost:5432/attendance?sslmode=disable
内容的提问来源于stack exchange,提问作者SP222
相关产品推荐
相关产品推荐

