我有一个使用 Play 框架构建的小型站点,我试图在 EC2 服务器上针对 Amazon RDS 实例运行该站点。我可以在我的机器上针对 RDS 实例运行该应用程序,一切正常。但是当我将它部署到我的 EC2 服务器时,出现了这个错误:
The last packet successfully received from the server was 1,282,977,731,085 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. at play.db.DBPlugin.onApplicationStart(DBPlugin.java:87) at play.Play.start(Play.java:381) at play.Play.init(Play.java:247) at play.server.Server.main(Server.java:85) Caused by: java.net.ConnectException: Connection refused
我的第一个想法是它是某种安全设置,但我有一个基于 Spring 的应用程序在同一台 EC2 服务器上的 Tomcat 中运行,使用相同的用户名和密码连接到同一 RDS 实例,并且它工作得很好。只有 Play 应用程序存在连接问题。
我似乎无法解释为什么会发生这种情况,也无法提出解决方法。
有人以前见过这样的东西吗?
最佳答案
问题出在 application.conf 文件上。如果您像这样指定本地数据库:
db=mysql:root:pass@db
你的产品数据库是这样的:
%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass
尝试在生产环境中运行时会出现此错误,因为 Play!实际上正在尝试使用 db=mysql:root:pass@db 参数进行连接,因为产品参数不会具体覆盖该参数。要解决此问题,请务必在本地和生产环境中以相同的方式连接到数据库。这对我有用:
db.url=jdbc:mysql://localhost:3306/db
db.user=root
db.pass=pass
%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass
关于java - 使用 Play 框架的 EC2 连接到 RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589782/