본문 바로가기

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 오류가 발생합니다.

    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에 연결 정보를 입력합니다.

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

    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 버전을 확인합니다.

    select version();

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

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

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

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

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