spring boot 與mybatis整合,type-aliases-package、type-handlers-package等配置不起作用,導致類載入失敗

spring boot 與mybatis整合,type-aliases-package、type-handlers-package等配置不起作用,導致類載入失敗

spring boot 與mybatis整合,type-aliases-package、type-handlers-package等配置不起作用,導致類載入失敗

剛剛接觸spring boot,專案中整合了mybatis,但配置沒用mybatis-spring-boot-autoconfigure自動配置,

導致mybatis的配置:

mybatis.type-aliases-package=com.example.domain.model
mybatis.type-handlers-package=com.example.typehandler

java -jar  xxx.war 執行方式,自動掃描機制不起作用,發生類載入失敗異常:

     Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘XXXXX’.  Cause: java.lang.ClassNotFoundException: Cannot find class: XXXXX

    一開始猜測mybatis在spring boot環境中的bug,掃描這些包中的類,但類載入找不到,肯定找的路徑不對,所以肯定是這一塊出現了問題,搜了下github上的issue,找到了關鍵點:

https://github.com/mybatis/spring-boot-starter/issues/21

https://github.com/StripesFramework/stripes/issues/35


org.mybatis.spring.SqlSessionFactoryBean
public void setVfs(Class<? extends org.apache.ibatis.io.VFS> vfs)


spring boot這種執行方式的檔案系統與之前的不一樣,所以mybatis需要設定spring boot vsf。

sqlSessionFactoryBean.setVfs(SpringBootVFS.class);

 由於原始碼這塊還沒好好看,如果你看過原始碼,也會看到mybatis-spring-boot-autoconfigure中的配置:

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

最後一行的配置,說明了mybatis對應spring boot環境的配置,

 至於怎麼掃描的,請看原始碼

SpringBootVFS