Spring Boot本地连接Heroku PostgreSQL插件报错求助
解决本地Spring Boot连接Heroku PostgreSQL的常见问题
我来帮你梳理下这两个问题的原因和解决办法:
第一个错误:java.sql.SQLException: Driver:org.postgresql.Driver@20999517 returned null for URL
这个问题的根源很直接——JDBC URL的协议前缀写错了。PostgreSQL的JDBC驱动只识别jdbc:postgresql://这个前缀,而你一开始用的是jdbc:postgres://,少了一个ql,驱动自然无法识别这个URL格式,所以返回了null。
第二个错误:org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "...", SSL off
你已经意识到要加sslmode=require,但可能配置没有完全生效。Heroku PostgreSQL强制要求所有外部连接(包括本地调试)必须使用SSL,仅仅在URL里加参数有时候可能因为连接池的配置优先级问题不生效,需要额外明确配置。
正确的配置方案
把你的application.properties改成下面这样:
# 修正协议前缀 + 强制SSL spring.datasource.url=jdbc:postgresql://ec2-23-21-201-255.compute-1.amazonaws.com:5432/d6eqamh4egp1g0?sslmode=require spring.datasource.username=qfxqpoceljdtfo spring.datasource.password=你的实际密码 spring.datasource.driver-class-name=org.postgresql.Driver # 针对Spring Boot默认的Hikari连接池,明确开启SSL spring.datasource.hikari.data-source-properties.ssl=true spring.datasource.hikari.data-source-properties.sslmode=require
额外验证步骤
- 确认Gradle依赖正确:确保你的
build.gradle里引入了最新稳定版的PostgreSQL驱动:implementation 'org.postgresql:postgresql:42.6.0' - 用Heroku CLI验证凭证有效性:执行你提供的命令测试连接:
如果能成功进入PostgreSQL命令行,说明你的数据库凭证是完全正确的,问题只在应用配置上。heroku pg:psql postgresql-metric-82455 --app battlesh1p
本地调试小贴士
- 本地调试时可以暂时硬编码密码,但上线前一定要改用环境变量或者Spring Cloud Config等方式管理敏感信息,避免泄露。
- 如果还是遇到SSL相关问题,可以尝试添加
sslfactory=org.postgresql.ssl.NonValidatingFactory参数到URL(仅本地调试用,生产环境不建议),跳过证书验证:spring.datasource.url=jdbc:postgresql://ec2-23-21-201-255.compute-1.amazonaws.com:5432/d6eqamh4egp1g0?sslmode=require&sslfactory=org.postgresql.ssl.NonValidatingFactory
内容的提问来源于stack exchange,提问作者Andrea deCandia
相关产品推荐
相关产品推荐

