Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS Aurora无服务器Spring引导通信链路错误_Java_Amazon Web Services_Spring Boot_Serverless_Aurora - Fatal编程技术网

Java AWS Aurora无服务器Spring引导通信链路错误

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

我正在做一个原型,将基于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/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