Programing/Springboot

Springboot + mybatis 연동 시 Type Exception 해결방법

리커니 2019. 10. 24. 16:48
반응형

 

Springboot + mybatis 프로젝트 배포시 Type Exception 해결방법

 

SpringBoot Version : 2.2.1

Mybatis Version : 1.3.2

 

Eclipse 에서는 이상 없이 동작하던 프로젝트가

Jar 파일로 배포 하면 아래와 같은 Exception이 발생했습니다.

 

Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'regionVO'. Cause: java.lang.ClassNotFoundException: Cannot find class: regionVO
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
... 77 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: regionVO
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)

 

Mybatis 설정 쪽에서도 setTypeAliasesPackage 를 제대로 설정했고

xml에서도 제대로 설정했는데 배포시에만 Exception이 발생했습니다.

 

<select id="getRegionCd" parameterType="regionVO" resultType="java.lang.Integer">

 

원인은 eclipse에서 구동될 때와 jar 파일 배포시에 구조가 달라 classes 접근이 되지 않아 alias 등록이 안됐기 때문입니다.

 

2가지 해결 방법.

 

첫번째, 최신 Mybatis로 버전업 하여 해결. 최신 Mybatis에서는 위의 문제를 해결하여 배포함.

 

implementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.1.1'

 

1.3.2 ==> 2.1.1

 

두번째, mybatis를 업데이트 할 수 없을 시 SqlSessionFactoryBean 설정 시 VFS(Virtual File System) 추가.

 

SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setMapperLocations(applicationContext.getResources("classpath*:매퍼패키지경로/*.xml"));
factory.setVfs(SpringBootVFS.class);  //<<==추가
factory.setTypeAliasesPackage("VO 패키지 경로");

 

위의 두가지 방법으로 해결이 가능합니다.

 

반응형