Java AWS Aurora无服务器Spring引导通信链路错误
我正在做一个原型,将基于Spring Boot的应用程序移动到AWS Aurora DB,包括无服务器模式。在配置模式下,一切按预期进行。但是,在无服务器模式下,应用程序无法从EC2实例连接到DB,例外情况如下:Java AWS Aurora无服务器Spring引导通信链路错误,java,amazon-web-services,spring-boot,serverless,aurora,Java,Amazon Web Services,Spring Boot,Serverless,Aurora,我正在做一个原型,将基于Spring Boot的应用程序移动到AWS Aurora DB,包括无服务器模式。在配置模式下,一切按预期进行。但是,在无服务器模式下,应用程序无法从EC2实例连接到DB,例外情况如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'entityManagerFactory' defined in class path resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
Invocation of init method failed; nested exception is javax.persistence.PersistenceException:
[PersistenceUnit: default] Unable to build Hibernate SessionFactory;
nested exception is org.hibernate.exception.JDBCConnectionException:
Unable to open JDBC Connection for DDL execution
.....
Caused by: com.mysql.cj.jdbc.exceptions.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.
我尝试过减少初始池大小等,但仍然得到相同的错误
spring.datasource.url=jdbc:mysql://xxxxxx.cluster-xxxxxxxxxx.us-east-1.rds.amazonaws.com:3306/db_example
spring.datasource.username=xxxx
spring.datasource.password=xxxxxxx
spring.datasource.hikari.maximum-pool-size=1
spring.datasource.hikari.minimum-idle=0
spring.datasource.hikari.connection-timeout=60000
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
....
当我将数据源更改为SimpleDataSource或从EC2实例运行一个简单的JavaJDBC连接时,它就工作了
@Bean("dataSource")
public DataSource dataSource() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
....
}
对于Spring boot JPA/JDBC应用程序,这正常吗?我们必须使用SimpleDriverDataSource吗?也许我们应该使用它?这可能会重新编写大量与数据库相关的代码。在无服务器模式下,虽然通过准备就绪的实例的警告池进行了高度优化,但您的应用程序需要一段时间才能真正连接到Aurora 由于这个原因,很可能在应用程序启动时与数据库的连接还不可用 对于错误跟踪,您似乎正在尝试执行某种DDL操作,可能是因为您正在使用hbm2ddl创建或验证数据库架构,而此操作需要在应用程序启动时建立连接 为了支持这种数据库体系结构,您可以懒洋洋地初始化bean(在实体管理器和Hibernate的情况下,这可能是基石),或者寻找一种类似Liquibase的DDL生成替代方法(尽管我认为问题仍然存在) 您可以尝试调整Hikari连接参数。例如,本文提出了一种巧妙的配置,并提供了对AWS Aurora的深入了解:
我唯一不明白的是,为什么您的代码可以与SimpleDriverDataSource一起工作:也许它提供了一些默认设置,允许您的应用程序从一开始就可以毫无错误地连接到Aurora。在无服务器模式下,尽管经过了高度优化,有一个随时可用的实例的警告池,您的应用程序需要一些时间才能真正连接到Aurora 由于这个原因,很可能在应用程序启动时与数据库的连接还不可用 对于错误跟踪,您似乎正在尝试执行某种DDL操作,可能是因为您正在使用hbm2ddl创建或验证数据库架构,而此操作需要在应用程序启动时建立连接 为了支持这种数据库体系结构,您可以懒洋洋地初始化bean(在实体管理器和Hibernate的情况下,这可能是基石),或者寻找一种类似Liquibase的DDL生成替代方法(尽管我认为问题仍然存在) 您可以尝试调整Hikari连接参数。例如,本文提出了一种巧妙的配置,并提供了对AWS Aurora的深入了解: 我唯一不明白的是,为什么您的代码可以与
SimpleDriverDataSource
一起工作:也许它提供了一些默认设置,允许您的应用程序从一开始就毫无错误地连接到Aurora