본문 바로가기

Java/Spring

"nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure" 오류

테스트 환경 및 주요 아젠다

닫기

이 프로젝트의 개발 환경

  • 개발 언어 및 환경
    • OpenJDK 12
    • Spring: spring-context: 5.0.2.RELEASE
    • Spring: spring-jdbc: 5.0.2.RELEASE
    • Tomcat: tomcat-jdbc: 8.5.27
    • MySQL: mysql-connector-java: 5.1.45
    • Gradle 7.3
  • 기타 환경
    • MySQL 8.2.0

스프링 프로젝트에서 MySQL 드라이버 클래스를 사용해 JdbcTemplate을 사용하고 있습니다.

MySQL 서버에 연결을 시도하면 nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 오류가 발생합니다.

shell
닫기
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 145 milliseconds ago. The last packet sent successfully to the server was 140 milliseconds ago. ‌at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) ‌at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:600) ‌at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:657) ‌at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688) ‌at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700) ‌at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:756) ‌at chap08.MemberDao.selectByEmail(MemberDao.java:22) ‌at chap08.MemberRegisterService.regist(MemberRegisterService.java:16) ‌at chap08.Main.processNewCommand(Main.java:73) ‌at chap08.Main.main(Main.java:31) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Step 1: MySQL 연결 정보 확인

소스 코드에서 tomcat의 DataSource를 생성하여 MySQL에 연결 정보를 입력합니다.

연결 정보가 잘못 입력된 경우 해당 오류가 발생 할 수 있습니다.

java
닫기
DataSource ds = new DataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8"); ds.setUsername("spring5"); ds.setPassword("spring5");

연결 정보가 오입력된 경우 수정하고 연결을 확인합니다. 연결 정보에 문제가 없는 경우 다음 단계를 진행합니다.

Step 2: MySQL Connector 의존성 버전 업데이트

MySQL 서버에 연결하여 MySQL 버전을 확인합니다.

sql
닫기
select version();

테스트 환경에 설치된 MySQL 버전은 8.2.0입니다.

프로젝트의 의존성 build.gradle에서 mysql-connector-java 버전은 5.1.45을 사용하고 있습니다.

MySQL Connector 버전을 업데이트 후 연결을 확인합니다.

kotlin
닫기
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.22'

이 테스트 환경에서는 8.0.22 버전으로 업데이트 후 정상적으로 연결되었습니다.