[英]HikariPool-2 - Exception during pool initialization
首先,我想说这个主题可能与其他主题有关,但我找不到针对此特定错误的解决方案。 请记住,仅当我在 Dockerfile 阶段和 CI 上执行我的./mvnw test
时才会发生此错误。
Dockerfile:
FROM eclipse-temurin:18.0.2.1_1-jdk-alpine AS test
ENV spring_profiles_active=test
ENV APP=/home/fvapi
WORKDIR $APP
COPY pom.xml mvnw ./
COPY .mvn .mvn
COPY src src
RUN ./mvnw test
在 CI 上,它只是克隆 repo 并执行相同的./mvnw test
。
错误是一个循环,你可以在这里看到它: https://pastebin.com/ar5BPXvp
我认为这里的要点是:
2022-09-14 04:05:46.254 INFO 131 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Starting...
2022-09-14 04:06:17.298 ERROR 131 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
I have already tried looking for anything related to both HikariPool-2 - Exception during pool initialization
, loop HikariPool-2 - Starting
and to the com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
, but I found nothing relevant.
我也试过这些application.properties
spring.datasource.url=jdbc:mysql://DATABASE_URL_FROM_AWS_RDS/dbname
spring.datasource.username=admin
spring.datasource.password=password
spring.datasource.platform=mysql
spring.jpa.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
并且
spring.datasource.url=jdbc:mysql://DATABASE_URL_FROM_AWS_RDS/dbname?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=admin
spring.datasource.password=password
spring.datasource.platform=mysql
spring.jpa.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
有人可以给我一盏灯吗?
PS:此错误仅在使用 docker 和 CI 运行时发生。 如果我在本地尝试,它可以工作。
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
问题很可能与访问数据库有关。 在初始化时 Spring 使用验证查询验证数据库,从 Hikari 池获取连接。 后者又无法连接数据库。 您需要仔细检查您实际尝试连接的主机和端口以及 CI 中 MySQL 公开的端口。 从您的application.properties
我看到您根本没有指定端口
spring.datasource.url=jdbc:mysql://DATABASE_URL_FROM_AWS_RDS/dbname
吨
spring.datasource.url=jdbc:mysql://DATABASE_URL_FROM_AWS_RDS:DATABASE_PORT_FROM_AWS_RDS/dbname
所以,我发现我们的 CI 无法访问我们的 AWS RDS 实例,这就是无法在 CI 上运行测试的原因。 在本地它不起作用,因为容器达到了访问 RDS 的超时时间,如果我尝试使用localhost
,它没有指向主机 ip,因为 docker 内的localhost
是容器本身,而不是主机。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.