java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction



아침에 출근 했는데 갑자기 온 사방에서 내가 만든 시스템에 로그인이 안된다고 쌩 앙탈들을 부렸다.


svn 자동으로 소스를 체크아웃 받아서 maven 으로 배포를 시켜주는 스크립트를 작성해서 매일 새벽 5시에 자동으로 배포 시키도록 해 놨는데.

어떤 아이가 잘못된 소스를 커밋해 놔서 그게 같이 배포가 된줄 알고 로그를 찬찬히 살펴봤더니 그런 종료의 에러가 아니였다.



익셉션 로그를 보니  첨보는 에러인 

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction; 

요런 에러가 뽓 있었다.

대충 보니 mybatis 에서 나는 에러 같았다.




에러의 원인은 요랫다.

maven 디펜던시에 mybatis 최신 스냅샷 버전을 받도록 설정이 되 있어서, 최신 스냅샷 버전의 라이브러리로 바뀌는 바람에 나는 에러였다.

기존 mybatis 디펜던시 설정은 요랬다. 
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.1.0-SNAPSHOT</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.0.3-SNAPSHOT</version>
</dependency>



요렇게 되 있는걸 릴리즈 버전을 쓰도록 요래 바꿔 주니깐 다시 잘 된다.
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.0.6</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.0.2</version>
</dependency>



mybatis 는 살짝살짝 버그가 쫌 있어서 최신 버전을 쓰는게 좋다고 해서 그렇게 해 놨는데, 스냅샷 버전을 쓰는것은 지양해야 되겠다.