Spring Boot应用连接VPC内私有子网RDS PostgreSQL失败求助
核心问题定位
从报错信息可明确判断:Driver org.postgresql.Driver claims to not accept jdbcUrl, test-rds.cpo655l07.ap-south-1.rds.amazonaws.com,这里的JDBC URL缺少jdbc:postgresql://前缀、端口5432以及数据库名test,完全不符合PostgreSQL JDBC URL的规范格式。这说明Spring Boot应用未正确读取到application.yml中配置的完整URL,和网络连通性无关——毕竟你已通过telnet验证EC2到RDS的网络可达性,且RDS公开后应用能正常连接。
解决方案
1. 检查YAML配置的缩进格式
YAML对缩进要求严格,必须确保url是spring.datasource的直接子属性,缩进层级与同配置项(如driver-class-name)一致。示例配置看似没问题,但实际部署到EC2的配置文件可能存在缩进错误,导致配置项被解析异常。
2. 验证配置是否正确加载
在应用中添加调试代码,打印实际加载的数据源URL,确认是否完整:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; // 在任意@Component或@Service类中添加 @Autowired private Environment env; @PostConstruct public void debugDbUrl() { System.out.println("实际加载的DB URL: " + env.getProperty("spring.datasource.url")); }
若打印结果不完整,说明配置文件确实存在格式问题,需修正。
3. 排除环境变量或启动参数覆盖
检查EC2实例的环境变量,或应用的启动命令参数,是否存在spring.datasource.url配置项覆盖了application.yml的值。比如启动命令中若有--spring.datasource.url=test-rds.cpo655l07.ap-south-1.rds.amazonaws.com,会直接导致URL不完整。
正确配置示例
确保application.yml格式如下(注意缩进一致):
server: port: 9091 spring: datasource: url: jdbc:postgresql://test-rds.cpo655l07.ap-south-1.rds.amazonaws.com:5432/test driver-class-name: org.postgresql.Driver username: test password: test jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: format_sql: true database: postgresql database-platform: org.hibernate.dialect.PostgreSQLDialect
内容的提问来源于stack exchange,提问作者Sm Srikanth

