迁移网站至AWS EC2与RDS后数据库连接异常求助
问题排查与解决思路
核心问题分析
报错信息java.sql.SQLException: Access denied for user 'username'@'localhost'说明应用实际使用的数据库连接配置并非你修改的admin和RDS端点,而是默认/旧的username和localhost配置,这是关键矛盾点。
1. 确认配置文件是否真正生效
- 登录EC2实例,找到应用部署目录下的
application.properties文件,直接打开检查内容是否和你本地修改的一致,避免打包时遗漏更新配置文件。 - 查看应用启动日志(比如Spring Boot的控制台日志或日志文件),搜索
spring.datasource相关输出,确认实际加载的url、username参数是否与配置一致。如果日志里显示的还是username和localhost,说明配置没被加载。
2. 排查Spring Boot配置优先级覆盖
Spring Boot的配置加载有优先级,外部配置可能覆盖application.properties:
- 检查EC2实例上是否设置了数据库相关的环境变量,比如
SPRING_DATASOURCE_USERNAME、SPRING_DATASOURCE_URL,这些环境变量的优先级高于配置文件。 - 查看应用启动命令,是否通过命令行参数(比如
--spring.datasource.username=username)指定了旧的配置项。
3. 验证RDS的可访问性(排除环境层面问题)
虽然报错指向localhost,但先确认EC2与RDS的网络连通性:
- 在EC2上执行命令测试RDS连接:
输入配置的密码,如果能成功连接,说明RDS本身的权限和网络是正常的;如果连接失败,检查RDS安全组是否允许EC2的IP/安全组访问3306端口,同时检查EC2安全组是否允许出站访问RDS端口。mysql -h management-system.ctyygqiegjpe.ap-southeast-2.rds.amazonaws.com -u admin -p
4. 检查代码中是否存在硬编码配置
- 全局搜索应用代码中的
localhost、username字符串,排查是否有DAO类、自定义数据源配置等地方硬编码了数据库连接信息,而非引用配置文件的变量。 - 比如某些自定义的
DataSourceBean,可能直接写死了连接参数,没有使用@Value或配置绑定。
5. 清理缓存并重启应用
- 停止应用进程,清理应用的临时文件(如
target目录、缓存目录),然后重新启动应用,避免旧配置被缓存。 - 如果是容器部署,确保重新构建镜像时包含了最新的配置文件,而非使用旧镜像。
内容的提问来源于stack exchange,提问作者Rlohaustralia
相关产品推荐
相关产品推荐

