今天在线上的项目,还没更新文件的情况重新发布了下测试版,结果出现以下的错误:
Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
折腾了一天的时间,然后找了度娘,这篇博客,找到了解决的办法,感谢,顺便记录下,一便下次查阅.
通用mapper是mybatis的扩展,它提供了一系列的通用方法,避免了冗余的xml编写和公共增删改查的重复劳动。它极大的简化了单表的增删改查,并可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
出现这个问题: Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
作者说这个问题是由于通用mapper没有初始化引起的,我查阅了关于spring boot中Configuration和AutoConfiguration加载顺序的资料,得出问题原因:spring boot中Configuration的加载在AutoConfiguration之前。 but, 为什么mybatis的starter初始化没有问题?
github上的一篇文章解答了这个问题(但我目前没在spring官网找到该描述的出处,如您找到了,请告知,谢谢。)
发现作者是使用 @PostConstruct 完成通用mapper的初始化的,所以在 Configuration 之后才会初始化,这就引发了以上的错误。
弄明白了问题所在,那该怎么解决呢?
弄明白原因了,其实问题就解决了,我们只要让通用mapper的AutoConfiguration在Configuration之前加载就可以了,但我们没办法在使用作者提供的starter,需要自己来实现。我将实现后的代码放到了github
感谢原文作者,此处是做以下记录,如果侵权,请告知删除,谢谢!!! 原文地址