원래 h2 데이터베이스와 연동했던 스프링 프로젝트를 Mysql 데이터베이스로 옮겨주려고 했다.
Mysql은 설치되어 있는 상황이었고, 이미 instance도 있었다.
https://growth-coder.tistory.com/111 을 참조해서 진행했다.
build.gradle에 가서
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.32'
을 해주고
이후 터미널에서
mysql -u root(Mysql 인스턴스의 user이름) -p 명령어를 입력하고 비밀번호를 입력해서 mysql에 접속한다.
이후 create database kwang; 을 통해 kwang이란 DB를 만들어줬다.
그리고 show databases;를 통해 kwang이란 DB가 만들어진 것을 확인했다.
이후
application.yml에 가서
spring:
datasource:
url: jdbc:mysql://localhost:3306/kwang?serverTimezone=Asia/Seoul
# localhost:3306은 내가 사용할 DB URL,kwang은 내가 사용할 데이터베이스 이름
username: root(localhost:3306 DB의 사용자이름)
password: 실제비밀번호입력
driver-class-name: com.mysql.cj.jdbc.Driver
# database connection? ??? ????? ??
jpa:
hibernate:
ddl-auto: validate
# application ?? ??? DB? ?? ??? ? ??? ????.
properties:
hibernate:
show_sql: true
# jpa sql? system out? ??? ???. ?? system?? ??? ? ?? ?og? ?? ?? ? ??? ?
format_sql: true
을 해줬다. 이렇게하고 실행하니깐
처음에는
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
에러가 났다. Java가 mysql Driver를 못 찾았다.
https://dev.mysql.com/downloads/connector/j/ 에 가서
platform independent를 선택 후(나는 mac이기 때문에)
다운로드하고 그 안의 mysql-connector.jar을 복사했다.
Java가 설치된 경로를 찾아서(나의 경우는 /Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home/lib, 나는 자바가 3가지 버전이 있었는데 스프링 프로젝트는 18을 썼기 때문에 zulu-18.jdk에 복사했다.) 그 위치에 mysql-connector.jar를 복사해줬다.
우측 상단의 돋보기 버튼을 클릭후 project structure를 검색한 뒤,
classpath 밑의 +버튼을 눌러 /Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home/lib/mysql-connector-jar을 추가하고 Ok버튼을 눌러줬다.
참고: https://velog.io/@minbo2002/JPA-application.yml-%EC%84%A4%EC%A0%95,
https://velog.io/@xangj0ng/MySQL-Mac-jdbc-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EB%8B%A4%EC%9A%B4,
https://velog.io/@hans4257/jsp-MySQL-%EC%97%B0%EB%8F%99-%EC%98%A4%EB%A5%98java.lang.ClassNotFoundException-com.mysql.jdbc.Driver
이렇게하고 나니
Schema-validation: missing table [xxx]
에러가 났는데 ddl-auto: validate 옵션이 테이블과 컬럼이 존재하는지 검사하고(내가 @Entity, @Table 붙여놓은 얘들이 Mysql에 존재하는지 검사) 만약 존재하지 않으면 예외를 던지기 때문이었다.
mysql에 가서 손수 테이블을 생성해주는 방법도 있지만 번거로워서
ddl-auto:none으로 프로젝트를 시작하고 스프링이 DB에 쿼리를 날리도록 해서(페이지에 들어가 식당 생성을 했다.) Mysql DB에 테이블과 데이터가 몇 개 들어가도록 한 뒤 ddl-auto:validate를 했더니 이상없이 실행됐다.
참고: https://velog.io/@jcw1031/JPA-Hibernate-schema-validation-%EC%98%A4%EB%A5%98 (Schema-validation: missing table 오류)