본문 바로가기

ErrorLog

빈 생성 에러 Injection of resource dependencies failed;

 

 

# 문제 발생 

 

SpringMVC 프로젝트를 run on server 에 올려 실행했는데 

Injection of resource dependencies failed; No bean named 'BoardService' available 에러가 발생했다. 

+ No setter found for property 'datasource' in class 'org.mybatis.spring.SqlSessionFactoryBean' 도 발생했다. 

 

 

# 에러 메시지 

 

 

 

# 해결과정

 

No bean named 'BoardService' available 라는 단서로 BoardService 에 가보았다. 

 

1) @Service 어노테이션은 선언되어 있었다. 

 

2) servlet-context.xml 에서 component-scan 에서 패키지명도 맞게 작성했다. 

 

3) servlet-context.xml 에서 xmlns 도 확인했다. 도대체 무슨 문제일까....

 

# 해결 

 

1) No setter found for property 'datasource' in class 에러는

45번 라인의 name="datasource" 를 카멜케이스로 작성하지 않아 발생한 에러였다.

name 을 카멜케이스로 작성해야 했던 이유는 전역변수를 가져다 사용하였기 때문인데,

이 전역변수는 라이브러리에 DataSource dataSource; 로 되어있기에 맞춰주어야 했다.

찾아본 결과 35번 라인 id 와 45번 라인 ref 는 사용자 정의값으로 동일하면 문제없고, name 은 반드시 dataSource 여야 한다. 

 

참고  https://mybatis.org/spring/ko/factorybean.html

 

org.springframework.jdbc.datasource.DriverManagerDataSource 라이브러리 .class 를 열어보면 setDriverClassName 을 확인할 수 있다. driverClassName 으로 변수선언이 되어있다는 것. 

2) log4j 라이브러리가 있음에도 debug log 가 콘솔에서 확인되지 않았던 건, logger level 이 info 이기 때문이었다. log4j.xml 레벨을 info 에서 debug 로 수정하니, 비로소 콘솔에서 로그 확인이 가능해졌다. 

 

 

콘솔 로그를 보면 test.do 요청으로 JDBC Connection 이 되어 select 문이 실행된 것이 확인된다.

그리고 포워딩 된 루트를 보면 board/home.jsp 로 가는데, board 폴더는 없다..

포워딩 루트가 잘못되어 404 NOT_FOUND 에러가 떴던 것이다..

 

 

DB연결 성공^^!