Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'dataSource' defined in class path resource
[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]:
Failed to instantiate [com.zaxxer.hikari.HikariDataSource]:
Factory method 'dataSource' threw exception with message:
Failed to determine a suitable driver class
이러한 오류를 마주하였다.
해결 방법
1. DB를 구축한다
2. application.properties에 DB 설정 정보를 아래와 같이 추가해준다.
# DB
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/csv_data?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&requireSSL=false&serverTimezone=Asia/Seoul&allowMultiQueries=true
spring.datasource.username=[데이터베이스 유저 이름]
spring.datasource.password=[데이터베이스 암호]
3. BUILD SUCCESSFUL 메시지와 함께 미소를 짓는다.
참고
위 datasource 설정의 spring.datasource.driver-class-name 부분을 보면
com.mysql.cj.jdbc.Driver로 설정되어있다.
기존에는 com.mysql.jdbc.Driver를 썼으나 mysql-connector-java 6 이후로 deprecated 됐다
com.mysql.cj.jdbc.Driver를 쓰게 되면 다음과 같은 오류 메시지를 받는다.
The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
<select id="getAllAdminAuthMenu" parameterType="java.lang.Integer" resultMap="AdminAuthMenuMap">
select M.IDX, M.`NAME`, M.NAME_KR, M.PATH, M.PARENT_IDX, AUA.AUTH, AUA.ADMIN_USER_IDX
from admin_user_auth AUA
join menu M on AUA.MENU_IDX = M.IDX
where AUA.ADMIN_USER_IDX = #{adminUserIdx,jdbcType=INTEGER} AND AUA.AUTH = 1 AND M.PARENT_IDX = 0
</select>
3-2-1. 유저와 메뉴 테이블을 JOIN 하여 유저별 사용 가능 메뉴를 부른다.
3-2-2. 유저 IDX를 파라미터로 받아 유저별로 불러온다.
3-2-3. AUTH = 1을 통해 사용 가능한 메뉴만 불러온다.
3-2-4. PARENT_IDX = 0을 통해 루트 메뉴만 불러온다.
3-3. 서브 메뉴를 불러올 서브 쿼리를 작성한다. collection에 선언한 함수명으로 이름을 지정한다.
메뉴 테이블의 SELF JOIN을 통해 파라미터로 받은 메뉴의 서브 메뉴를 불러온다.
<select id="selectSubMenu" parameterType="java.util.Map" resultMap="BaseResultMap">
select m2.IDX, m2.NAME, m2.NAME_KR, m2.PATH, m2.PARENT_IDX
from admin_user_auth aua
inner join menu m on aua.MENU_IDX = m.IDX
inner join menu m2 on m.IDX = m2.PARENT_IDX
where m.IDX = #{idx}
and aua.ADMIN_USER_IDX = #{adminUserIdx}
and aua.AUTH = 1
</select>
4. Service.java에서 작성한 mapper 호출 후 유저 별 사용 가능 테이블 정보를 받아서
유저 클래스에 세팅해준다. (유저 관련 데이터 및 메서드는 다른 분야라 해당 게시글에서는 생략)