반응형
Spring boot + Mybatis 로 프로젝트를 진행하고 있었습니다.
그런데 잘 되던 녀석이 갑자기 Exception이 나면서 구동이 안되는 겁니다.
ClassNotFound 라니 정말 당황했습니다. ㄷㄷㄷ
환경(Environment)
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> ... <!-- mybaits --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.1</version> </dependency> ... </dependencies> |
mybatis/config.xml
1 2 3 4 | <typeAliases> <package name="kr.co.tistory.goni9071.dao" /> <package name="kr.co.tistory.goni9071.entity" /> </typeAliases> |
문제(Problem)
1. Mybatis 설정에서 TypeAliases의 package 를 이용하면 Entity 파일을 인식하지 못함.
2. 더 당황스러운 건 STS 개발환경에서는 문제가 없으나 executable jar/war 에서만 오류가 발생.
Exception
1 2 3 4 5 6 7 8 9 10 | $ java -jar target/xxxx.jar ... at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118) ... 44 more Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'Message'. Cause: java.lang.ClassNotFoundException: Cannot find class: Message 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) ... 48 more ... |
원인(Cause)
1. application.properties 에서 아래와 같이 설정시에는 문제가 없음.
1 2 | #mybatis mybatis.config-location=classpath:mybatis/config.xml |
2. 그러나 아래처럼 Java Config를 이용해 수동으로 설정시 오류가 발생.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Configuration @MapperScan(value = Constants.PACKAGE_BASE + ".dao", sqlSessionFactoryRef = "coreSqlSessionFactory") public class CoreRepositoryConfig { @Bean(name = "coreSqlSessionFactory") @Primary public SqlSessionFactory coreSqlSessionFactory(@Qualifier("coreDatasource") DataSource coreDatasource, ApplicationContext applicationContext) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(coreDatasource); sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis/config.xml")); // 문제의 주범 및 해결책 sqlSessionFactoryBean.setVfs(SpringBootVFS.class); // return sqlSessionFactoryBean.getObject(); } } |
해결책(Solution)
1. 위의 코드처럼 아래 한줄이 추가되면 문제 해결.
1 | sqlSessionFactoryBean.setVfs(SpringBootVFS.class); |
반응형
'java' 카테고리의 다른 글
[tomcat-jdbc] Found class org.apache.juli.logging.Log, but interface was expected (0) | 2018.08.24 |
---|---|
Spring RestTemplate Request Parameter Encoding (0) | 2018.08.16 |
spring boot main args - ApplicationArguments (0) | 2018.08.16 |
java file create time (0) | 2018.08.13 |
mybatis large result set. 대용량 select. fetchSize (0) | 2018.08.07 |
gc overhead limit exceeded excel download 엑셀 대용량 쓰기 (2) | 2018.08.06 |
spring boot junit test in linux (0) | 2018.08.02 |
maven cache clear. 메이븐 캐시 클리어. (0) | 2018.07.31 |