之前分享过Mybatis连接PGSQL数据库,为了操作方便增加了一些类型处理器的文章,那时使用的是Springboot框架, 在这里,当时直接启动项目就注册了这些类型处理器,今天接触了新项目也要用到这些类型处理器,就自然而然的复制了过来,没想到启动项目不生效,找了半天才发现原因,这个项目是Springboot多模块的,然而我放置的位置在Springboot启动类所在的包的外面,所以导致即使加了@Configuration也无法被扫描到,根本就没生成Bean!
问题到此位置已经很明确了,只要你把这些类注册到容器就可以了。(注意,一般类型的处理器不需要注册到容器,这里是因为PGSQL中的UUID这种类型在项目对应的Java类中的UUID类型,然后项目启动找不到Java中UUID对应的类型处理器报错的,项目启动如果扫描到了UUID对应的类型处理器就不会报错了,因为扫描到就代表有保底了,到时默认就以扫描到的处理器去处理UUID类型,当然你也可以指定其他的。总而言之,这里的问题是无法找到XX类型对应的类型处理器导致的错误。Mybatis默认提供了许多常见类型的处理器,感兴趣可以自行搜索)
其他的小记录
但是我看到我之前放置的位置(就是没生效的包的位置)明明有其他配置类,这些类是可以生效的,于是我就上网查了一下资料,发现Springboot自动注册时会读取类路径下的 META-INF/spring.factories 文件来查找需要自动配置的类。(老版本叫spring.factories ,在2.4版本之后叫org.springframework.boot.autoconfigure.AutoConfiguration.imports),果然找到了这个文件,里面配置了一些类的全限定名,这些类就是我刚才说到的其他配置类,所以才出现我的没生效,但是同包的其他配置类生效。。。