Backend/리눅스

[리눅스] Spring Boot 3.0 build 시 java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java 에러

mirae.kwak 2023. 5. 31. 15:37
728x90

문제

GCP 우분투 인스턴스에 MySQL을 실행하고 MySQL과 연결한 SpringBoot 3.0을 서버에서 ./gradlew build를 시켰을 때 다음과 같은 에러가 발생했다.

java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java

에러가 시작된 곳은 hibernate 예외였다.

org.hibernate.hibernateexception at dialectfactoryimpl.javadelegate.java

 

해결

해당 에러는 Spring Boot에 설정한 DB에 연결할 수 없을 때 발생한다. 보통 이유는 두가지 이다.

  1. DB를 실행시키지 않음
  2. datasource 정보를 잘못적음

DB를 실행시키지 않았다면 실행시키면 되고, datasource 정보의 경우 올바르게 적으면 된다.

# application.yml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Seoul
    username: pop
    password: pop

  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true
    hibernate:
      ddl-auto: update

 

나는 이 두가지를 다 했었는데 작동이 되지 않았는데, 이유는 DB 사용자 였다.내가 생성하고, 접근도 허용한 사용자가 실제로 없었던 사용자 였던것이다!

 

mysql에 접속하여 다음 명령어로 사용자를 생성하고 db에 대한 권한을 부여한 후 저장했다.

use mysql;
create user 'pop'@'localhost' identified with mysql_native_password by 'test123';
GRANT ALL PRIVILEGES ON testdb.* TO 'pop'@'localhost';
FLUSH PRIVILEGES;

그리고 user 목록을 조회했다.

  • 에러 해결 후 캡처해서 잘 작성되어있지만, 당시에는 1행의 user가 존재하지 않았다.
  • pop이라는 user가 존재하지 않는데 Spring Boot에서는 pop으로 접속하라고 하니 안됐었다.
  • pop user를 다시 생성한 결과  위와 같이 생성되었고 잘 연결됐다.
    • workbench 연결을 위해 %로 host를 설정했다.

 

사용자만 잘 생성해주면 해결 완료~!

728x90