我在运行我在 EC2 实例中开发的应用程序时遇到问题。当我执行 .jar (java -jar app.jar) 时,SpringBoot 应用程序启动但在尝试连接到我的 MySQL RDS 数据库时失败。问题是当我在我的机器上本地运行应用程序时,数据库连接没有问题。
我已经为入站和出站流量打开了应用程序运行的端口 (8090) 和 MySql 端口 (3306):
这是我得到的错误:
2016-09-23 17:46:38.132 INFO 10161 --- [main] .t.TomcatEmbeddedServletContainerFactory : Server initialized with port: 8090
2016-09-23 17:46:38.604 INFO 10161 --- [main] o.apache.catalina.core.StandardService : Starting service Tomcat
2016-09-23 17:46:38.605 INFO 10161 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.54
2016-09-23 17:46:38.724 INFO 10161 --- [ost startStop 1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2016-09-23 17:46:38.725 INFO 10161 --- [ost startStop 1] o.s.web.context.ContextLoader: Root WebApplicationContext: initialization completed in 5028 ms
2016-09-23 17:48:48.476 ERROR 10161 --- [ost startStop 1] o.a.tomcat.jdbc.pool.ConnectionPool: Unable to create initial connections of pool.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
有什么办法可以解决这个问题吗?
非常感谢您的帮助
问候
安德烈斯
最佳答案
根据您的描述和日志文件,网络配置很可能是这里的原因。
您可能想要绘制实例的网络拓扑(区域/可用区、VPC、子网、网络 acl、安全组)。当您进行更复杂的开发工作时,这将非常有帮助。 有很好的引用资料:VPC Introduction和 Security in your VPC和 Scenarios for Accessing a DB Instance in a VPC
我建议您采取以下措施来解决问题:
检查您的 EC2 实例和 RDS 实例的安全组 (SG) 配置。
您可以通过转到 EC2 仪表板/RDS 仪表板 -> 单击一个实例并查看“安全组”描述来检查这一点,或者您可以单击设置图标(显示/隐藏列)并勾选“安全组”。在 RDS 的 SG 配置中:确保您已启用从 EC2 实例的 SG 到端口 3306 的访问。您可以通过将 EC2 实例的 SG ID 作为“自定义 IP”值放入配置的源字段来实现。有关详细信息,请参阅上述引用资料中的第一个场景。
使用mysql命令行测试EC2实例与RDS的连接。
希望对您有所帮助。
关于java - 在 AWS-EC2 上运行的 Spring Boot 应用程序无法连接到 MySQL AWS-RDS 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39673660/