请帮我在AWS上启动WAR Spring MVC Web应用程序(亚马逊网络服务) 它失败,连接超时到数据库(到RDS - 也是亚马逊)。
我工作当地绝对没问题。通过tomcat它连接到我的RDS并工作, 但是当我在AWS上部署这场战争时 - 超时。
我尝试添加配置以增加超时,但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)
弹性豆秆的安全性
Security Group for elastic bean
ec2的安全性 Security Group for EC2 instance where public access failed
答案 0 :(得分:0)
实际上,这不是配置文件不起作用的问题,这是由于安全组正在阻止端口或不允许您的应用程序与数据库连接。
因此,如果您正在使用RDS实例,请检查您的RDS的安全组,以及它所在的 VPC 。最好的方法就是尝试ping您的RDS实例,然后查看您是否从中获得回复。
如果您正在使用Mysql,并且在实例内运行,则只需在 EC2安全组中允许端口(对于MySQL为3306)。由于您的端口未打开,因此AWS无法建立连接 在这种情况下,如果未在部署之前安装Mysql,则必须在实例中安装Mysql。
当您尝试使用本地开发(Tomcat)时会发生什么,所以发生的是,在我们的代码中,我们提到localhost:3306作为连接URL,并且位于可以正常运行的同一台计算机上(您的开发和MySQL)很好。