部署 .ebextensions 配置的 AWS Web 应用程序超时问题不起作用

Timeout issue on AWS Web app deploying .ebextensions config don't work

请帮助我启动 WAR Spring AWS 上的 MVC Web 应用程序(Amazon Web 服务) 它因与数据库的连接超时而失败(到 RDS - 也包括亚马逊)。

我在当地工作得很好。通过 tomcat 它连接到我的 RDS 并工作, 但是当我在 AWS 上部署此 war 时 - 超时。

我尝试添加配置以增加超时,但它似乎被 AWS 忽略了。

你能帮忙吗??

WAR 文件的结构:

-META-INF
-WEB-INF
  |- classes
  |- lib
  |- view (*.jsp here)
-.ebextensions
  |- timeout.config

timeout.config内容:

option_settings:
    - namespace: aws:elasticbeanstalk:command
      option_name: Timeout
      value: 1800

日志: 其中 com.books.dao.impl.GenreDAOImpl.findAll(GenreDAOImpl.java:49) 我对 DB 的第一个请求。

16-Jun-2018 20:24:46.050 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection] with root cause
 java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:161)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:159)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:196)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:159)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:394)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:474)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:484)
    at com.books.dao.impl.GenreDAOImpl.findAll(GenreDAOImpl.java:49)

elasticbeanstalk 的安全性

Security Group for elastic bean

ec2 的安全性 Security Group for EC2 instance where public access failed

实际上,这不是配置文件无法正常工作的问题,这是由于安全组阻塞了端口或不允许您的应用程序连接到数据库。

因此,如果您使用的是 RDS 实例,请检查 RDS 的 安全组 ,以及它所在的 VPC。最好只是尝试 ping 你的 RDS 实例,看看你是否从它那里得到回复。

如果您在您的实例中使用 Mysql、运行,那么只需在您的实例中允许 端口(MySQL 为 3306) EC2 安全组。由于您的 Port 未打开,因此 AWS 将无法建立连接 在这种情况下,如果在部署之前未安装,则必须在您的实例中安装 Mysql。

当你尝试本地开发时会发生什么(Tomcat),那么发生的事情是,在我们的代码中,我们提到 localhost:3306 作为连接 URL 并且正在在同一台机器上(您的开发和 MySQL)它工作正常。