작성
·
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>
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();
}
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
제가 해당 소스를 받아서 mysql 이 설치된 pc 에서 실행을 해보니
동일한 오류가 발생하는걸 확인하였습니다.
(mysql 이 설치되지 않는 pc 에서는 오류가 나지 않네요)
제가 해결한 방법은 version down 으로 해결했습니다.
아마도 스프링부트 버전과 자바버전등 환경의 문제로 2.7.7 이상 버전에서는
오류가 발생하는것 같아요.
아래 처리로 꼭 해결되었으면 좋겠습니다.
네.. 해당 부분은 아마도 부트의 버전과 자바의 버전이 안맞아서 그러지 않았나 생각이 드네요.
해당 강좌의 섹션19.작업준비(프로젝트생성 - 작업소스 포함) 에 부트 3.2.3, 자바17버전으로 프로젝트 컨버전 한 내용이 있습니다.
참고하시면 현재 버전으로도 작업 가능할것으로 보입니다.
0
아 그리고, 저는 오류는 안났지만 뭔가 화면이 나오는게 문제가 있는것 같아요
(이것때문인지는 모르겠지만, 저도 개발할때 아래의 값이 안맞으면 오류가 발생하던 기억이 있습니다.)
위 menu.html 파일에서 db 의 값을 map 을 이용해서 가져올때 key 값이 올바르지 않습니다.
위 값을 그대로 사용하기 때문에
커피No, 메뉴명의 key 값은 no, coffee 로 되어야 합니다.
우선 수정해보시고 다시한번 실행해 보시죠..
<th th:text="${prod.get('no')}">커피No</th>
<td th:text="${prod.get('coffee')}">메뉴명</td>
0
안녕하세요.
우선 소스는 제가 검증이 가능하기때문에 src > main 만 압축해서 메일 보내주시면
소스체크는 해보도록 하겠습니다.
소스에 문제가 없다면, 단순하게 jdbc 를 이용해서 커넥션만 체크해 보는것도 좋을것 같아요.
good.dhkim@gmail.com
0
안녕하세요
오류 내용에
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 연결을 직접 확인하는 방법이 들어 있습니다.
꼭 해결되었으면 좋겠습니다.
그리고, 이런 과정을 통해서 어떤 상황에서 오류가 발생하는것을 알아가는것도
그냥 잘 되는것보다 많은 것을 알 수 있으니 힘내시기 바랍니다.
참고로
저는 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
소스는 강의자료에서 제공해주신 코드를 사용했습니다.
마리아디비 설치 후 HeidiSQL에서 세션 생성 후 쿼리문이 작동하는 것 까지 확인했습니다.
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을 제거해봐도 오류가 동일합니다.
흑 버전 낮추니까 진짜로 되네요... 혹시 이게 어떤 원리일가요 ??
혹시 버전 낮추지않고 할수 있는 방법은 없을가요 ?