티스토리 뷰

반응형

 

 

 



 

 

 

 

SpringBoot

 

 

 

 

 

 

 

Servlet.service() for servlet [dispatcherServlet] 
in context with path [] threw exception 
[Request processing failed; nested exception is java.lang.NullPointerException] 
with root cause

 

 

내가 맞이한 오류는 위와 같은데

 

어떤 상황이었냐면 jar 를 배포했을때

Mybatis 조회쿼리를 호출하면 위와 같은 오류가 발생했다.

 

개발툴에서는 문제없이 구동되고 있었기 때문에 몰랐고,

배포하고 나서야 알게 되었다.

 

 

프로젝트의 Mybatis 는 mapper 방식과 dao SqlSession 방식 모두 쓰는 형태인데

그 중 dao SqlSession 방식은 구프로젝트의 뼈대 모듈을 그대로 가져온 상태였다.

 

mybatis 설정자체가 문제인가 싶어 이것저것 보다가 mapper 방식으로 바꿔 조회했더니

mapper 방식은 오류가 발생하지 않았다.

 

그럼 이제 dao SqlSession 으로 호출 하는 쪽이

jar 로 배포했을때 의존주입이 제대로 안되는 걸 파악했다.

 

 

 

 

그래서 dao 와 service, controller 를 한번 쭉 열어봤는데...

 

@Repository("MyBatisDao")
public class MyBatisDao implements Dao {
    @Autowired
    private SqlSession sqlSession;
    
    ...
}


@Service("MainService")
public class MainService{

	@Inject
	@Named("MyBatisDao")
	private MyBatisDao myBatisDao;
    
    ...
}
 
 
@Controller
public class MainController {

	@Inject
	@Named("MainService")
	private MainService mainService;
    
    ...
}

 

 

이제 springboot 에서는 @Inject + @Named  어노테이션을 사용하지 않고

빈네임이 중복되는 상황이 아니라면 @Autowired로 의존주입을 자동으로 다 해주기에

 

위 레거시 코드들을 아래와 같이 변경했다.

 

@Repository
public class MyBatisDao implements Dao {

    @Autowired
    private SqlSession sqlSession;
}


@Service
public class MainService{

	@Autowired
	private MyBatisDao myBatisDao;
}


@Controller
public class MainController {

	@Autowired
	private MainService mainService;
}

 

 

그리고 빌드 후 jar 로 다시 배포했더니

아까 문제가 있던 mybatis 조회쿼리가 정상적으로 수행되었다.

 

 

레거시 모듈이 spring 초기에 사용하던 코드였다 보니

springboot 에서 약간의 문제가 발생했다.

 

 

 

오류해결에 시간을 쫌 허비 했는데

인텔리제이 개발툴에서는 이런 문제가 발생하지 않고 있어서

jar 배포시에 xml 경로나 다른 문제가 발생한 줄 알고 엉뚱한 부분을 계속 뜯어보고 있었다.

 

 

 

 

 



 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday