Spring/Spring Boot

Spring Boot > Fully executable jar 실행 시 MyBatis 에러

Krevis 2024. 4. 18. 08:10

에러 내용

Caused by: java.lang.ClassNotFoundException: Cannot find class: 별칭
        at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)

환경

  • org.mybatis.spring.boot:mybatis-spring-boot-starter 의존성 사용
  • SqlSessionFactory 빈을 직접 등록해서 사용

원인

SqlSessionFactory 빈을 별도로 등록하지 않고 스프링 부트 자동 설정을 통해 빈이 등록되도록 하면 문제가 없다

 

org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure 의존성의 MybatisAutoConfiguration 클래스에는 sqlSessionFactory 빈을 자동 설정하게 되어 있는데

@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setVfs(SpringBootVFS.class);
..

 

여기서 setVfs 메서드 호출하는 부분이 있다

 

SpringBootVFS는 MyBatis의 가상 파일 시스템(Virtual File System) 구현 중 하나로, Spring Boot 프로젝트의 클래스 경로와 리소스를 관리하고 접근하는 역할을 한다. SpringBootVFS를 사용하면 Spring Boot의 클래스 로더와 리소스 로더를 통해 MyBatis가 클래스 패스 및 리소스를 검색할 수 있게 해준다

 

결국 문제 원인은 SqlSessionFactory 빈을 직접 등록 시 해당 메서드 호출하는 부분이 빠져있었기 때문이었다

해결

factory.setVfs(SpringBootVFS.class); 추가하여 해결

참고