인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Deutan님의 프로필 이미지
Deutan

작성한 질문수

스프링 부트 웹 개발 입문 - 따라하며 배우기

MyBatis 환경 설정 & 조회하기까지 (select)

DB 연동 부분에서 에러가 발생합니다.

작성

·

3.6K

0

에러 코드 중 일부입니다.

 This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Mar 05 16:31:35 KST 2023

There was an unexpected error (type=Internal Server Error, status=500).

nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null ### The error may exist in file [build\resources\main\sqlmapper\v1\CoffeeMenu.xml] ### The error may involve com.boot.sailing.v1.dao.MenuDao.doList ### The error occurred while executing a query ### Cause: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null ### The error may exist in file [build\resources\main\sqlmapper\v1\CoffeeMenu.xml] ### The error may involve com.boot.sailing.v1.dao.MenuDao.doList ### The error occurred while executing a query ### Cause: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null

 

CoffeeMenu.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.boot.sailing.v1.dao.MenuDao">
    <!-- 메뉴 조회 -->
    <select id="doList" resultType="map">
        SELECT no, coffee, kind, price,
        DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day,
        DATE_FORMAT(mod_day,'%Y.%m.%d') AS mod_day
        FROM coffee_menu;
    </select>

</mapper>

MenuDao.java

package com.boot.sailing.v1.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface MenuDao {
    List<Map<String, Object>> doList();
}

MenuSvc.java

package com.boot.sailing.v1.service;

import com.boot.sailing.v1.dao.MenuDao;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
@Log4j2
public class MenuSvc {
    @Autowired
    MenuDao menuDao;

    public List<Map<String, Object>> doList(){

        // Data 만들기 , List , Map
        List<Map<String, Object>> list = menuDao.doList();

        log.info(list);

        return list;

    }

    public MenuSvc() {
        log.info("============== MenuSvc , 생성자 =====================");
    }

}

DB도 강사님이랑 똑같이 설정했는데 왜 에러가 발생하는지 모르겠습니다

답변 5

0

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

제가 해당 소스를 받아서 mysql 이 설치된 pc 에서 실행을 해보니
동일한 오류가 발생하는걸 확인하였습니다.
(mysql 이 설치되지 않는 pc 에서는 오류가 나지 않네요)

제가 해결한 방법은 version down 으로 해결했습니다.
아마도 스프링부트 버전과 자바버전등 환경의 문제로 2.7.7 이상 버전에서는
오류가 발생하는것 같아요.

아래 처리로 꼭 해결되었으면 좋겠습니다.

image

흑 버전 낮추니까 진짜로 되네요... 혹시 이게 어떤 원리일가요 ??

혹시 버전 낮추지않고 할수 있는 방법은 없을가요 ?

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

네.. 해당 부분은 아마도 부트의 버전과 자바의 버전이 안맞아서 그러지 않았나 생각이 드네요.

해당 강좌의 섹션19.작업준비(프로젝트생성 - 작업소스 포함) 에 부트 3.2.3, 자바17버전으로 프로젝트 컨버전 한 내용이 있습니다.

참고하시면 현재 버전으로도 작업 가능할것으로 보입니다.

0

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

아 그리고, 저는 오류는 안났지만 뭔가 화면이 나오는게 문제가 있는것 같아요
(이것때문인지는 모르겠지만, 저도 개발할때 아래의 값이 안맞으면 오류가 발생하던 기억이 있습니다.)

image

위 menu.html 파일에서 db 의 값을 map 을 이용해서 가져올때 key 값이 올바르지 않습니다.

image

위 값을 그대로 사용하기 때문에

커피No, 메뉴명의 key 값은 no, coffee 로 되어야 합니다.
우선 수정해보시고 다시한번 실행해 보시죠..

<th th:text="${prod.get('no')}">커피No</th>
<td th:text="${prod.get('coffee')}">메뉴명</td>
Deutan님의 프로필 이미지
Deutan
질문자

No -> no, name -> coffee로 변경해도 동일한 오류가 계속되며 마리아디비 재설치후 실행해도 동일한 에러가 발생합니다

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

네.. 이제는 왜 안되는지 제가 다 궁금하네요.

이럴경우에는 단위테스트를 해보는게 좋은데..

제가 해당 소스로 단위테스트 하는 영상을 하나 만들어서 공유할테니
한번 참고해 보세요.

9시 정도에 올려서 여기에 경로 공유할게요.

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

유투브영상 보시고 단위테스트로 한번 확인해 보세요.

https://youtu.be/ugthz7YqsJg

 그리고, 그래도 오류가 난다면 콘솔에 있는 오류로그 보내주시면 같이 고민해볼게요.

0

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

안녕하세요.

우선 소스는 제가 검증이 가능하기때문에 src > main 만 압축해서 메일 보내주시면
소스체크는 해보도록 하겠습니다.

소스에 문제가 없다면, 단순하게 jdbc 를 이용해서 커넥션만 체크해 보는것도 좋을것 같아요.

good.dhkim@gmail.com

Deutan님의 프로필 이미지
Deutan
질문자

main 파일 압축해서 good.dhkim@gmail.com로 보냈습니다.

지속적인 관심 가져주셔서 감사합니다.

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

해결될때까지 어떻게든 도와드리고자 합니다.

메일이 아직 오지 않았습니다.

메일 다시한번 확인 해주세요.

Deutan님의 프로필 이미지
Deutan
질문자

메일 다시 보냈습니다!!

메일이 도착하지 않는다면 깃허브에 올린 소스코드 참조해주시면 감사하겠습니다!

https://github.com/kamja44/LearnSpringBoot

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

네.. github 에서 소스 받아서 그대로 실행해 보았는데, (소스 하나도 안건드리고 그대로 실행)

image위와같이 잘 나오는걸 확인했습니다.

imageDB 연결 오류없이 , select 부분도 잘 나오구요.

그렇다면 소스에 문제가 있는게 아닌 db 접속부분에 문제가 있는 것 같아요.

mariadb 를 삭제하고 다시한번 설치해보면 어떨까 생각도 해봅니다.

해결방안에 대해 저도 확인해 보겠습니다.

0

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

안녕하세요
오류 내용에
Failed to initialize pool: null 이 있는것으로 보아 DB 커넥션 부분에 문제가 있을것으로 보입니다.
쿼리에 문제가 있을경우 보통 잘못된 쿼리를 에러에 같이 보여주기 때문에 위와 같이 생각할 수 있습니다.

우선 application.properties 의 DB 정보를 확인해보시고,
다음으로 Dao 를 체크하고 , 그 다음 sqlmapper 를 체크하야 하는데

혹시 모르니
CoffeeMenu.xml 파일의
SELECT no, coffee, kind, price, DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day, DATE_FORMAT(mod_day,'%Y.%m.%d') AS mod_day
FROM coffee_menu; -> FROM coffee_menu 뒤에 세미콜론 삭제도 해보시기 바랍니다.

<mapper namespace="com.boot.sailing.v1.dao.MenuDao"> <!-- 메뉴 조회 --> <select id="doList" resultType="map"> SELECT no, coffee, kind, price, DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day, DATE_FORMAT(mod_day,'%Y.%m.%d') AS mod_day FROM coffee_menu </select>

계속해서 처리가 안된다면

강의 내용 중

섹션 7. DB 연결 Mybatis 를 사용하자
-> logback-spring.xml 설정

섹션 11. DB Transacion 기초 와 개념 이해 with Boot
-> Connection Pool - HikariCP를 만나보자

강의를 먼저 보시기 바랍니다.
DB 연결을 직접 확인하는 방법이 들어 있습니다.

꼭 해결되었으면 좋겠습니다.

그리고, 이런 과정을 통해서 어떤 상황에서 오류가 발생하는것을 알아가는것도
그냥 잘 되는것보다 많은 것을 알 수 있으니 힘내시기 바랍니다.

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

참고로
저는 DB 연결 시 3307 port 를 사용했는데
보통은 3306 port 를 사용합니다.
이부분도 한번 체크해 보시기 바랍니다.

# Configuration MariaDb
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/boot
spring.datasource.username=boot
spring.datasource.password=boot

 

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

위 문제가 해결되었나 모르겠네요.

해결이 안되었다면, 전체 소스를 압축해서 저에게 보내주시면 제가 확인해보겠습니다.

good.dhkim@gmail.com

Deutan님의 프로필 이미지
Deutan
질문자

소스는 강의자료에서 제공해주신 코드를 사용했습니다.

마리아디비 설치 후 HeidiSQL에서 세션 생성 후 쿼리문이 작동하는 것 까지 확인했습니다.

imageimage

MariaDB가 잘 다운되었나 확인하기 위해 cmd 창에 mariadb -v 명령어를 입력하니

ERROR 1045 (28000): Access denied for user '유저아이디'@'localhost' (using password: NO)

이런 에러가 발생하며 접근이 거절되었습니다.

mariadb -uroot -proot 명령어를 입력하면 root 계정으로 mariadb에 접근이 가능합니다.

사용자는 root와 boot만 생성했습니다.

포트는 3307번을 이용했습니다.

접근이 거절된 유저는 제가 생성한 적이 없고, 왜 접근이 거절된지 모르겠습니다.

 

기존설치되어 있던 mysql은 3306포트를 사용중이며 혹시 몰라 takkill을 이용하여 3306포트를 이용하고 있는 mysql을 제거해봐도 오류가 동일합니다.

Deutan님의 프로필 이미지
Deutan

작성한 질문수

질문하기