本文是 mybatis-xmlreload
项目最新 3.0.5.m3 版本的更新介绍以及使用文档
简介
自博主从事开发工作使用 Mybatis 以来,如果需要修改 xml 文件的内容,通常都需要重启项目,因为不重启的话,修改是不生效的,Mybatis 仅仅会在项目初始化的时候将 xml 文件加载进内存。
本着提升开发效率且网上没有能够直接使用的轮子初衷,博主就自己开发了 mybatis-xmlreload-spring-boot-starter
这个项目。它能够帮助我们在 Spring Boot Mybatis
的开发环境中修改 xml 后,不需要重启项目就能让修改过后 xml 文件立即生效,实现热加载功能。对于一些需要在本地或者生产环境实现 mybatis xml
文件热加载的功能,那么可以引入接这个项目解决问题。
项目地址
- https://github.com/wayn111/mybatis-xmlreload-spring-boot-starter 欢迎大家关注,点个 star
分支说明
分支名称 | Spring Boot 版本 | Mybatis Xmlreload 版本 |
---|---|---|
main | 3.0.4 | 3.0.5.m3 |
springboot2 | 2.2.7.RELEASE | 2.0.5.m3 |
3.0.5.m3 版本更新内容
- 修复项目开启全局懒加载时,
MybatisXmlReloadConfiguration
类未生效的问题。 - 修复生产环境修改 xml 文件时,爆出
Mapped Statements collection does not contain value ...
异常的问题。
原理
- 修改 xml 文件的加载逻辑。在普通的
mybatis-spring
项目中,默认只会加载项目编译过后的 xml 文件,也就是 target 目录下的 xml 文件。但是在mybatis-xmlreload-spring-boot-starter
中,修改了这一点,它会加载 Maven 项目中 resources 、 java 目录下的 xml 文件或者是本地指定目录下的 xml 文件,这样用户对于 xml 文件的修改操作可以立即触发热加载。 - 通过
io.methvin.directory-watcher
项目来监听 xml 文件的修改操作,它底层是通过java.nio
的WatchService
来实现,当我们监听了整个resources
目录后,xml 文件的修改会立马触发 MODIFY 事件。 - 通过
mybatis-spring
项目原生的xmlMapperBuilder.parse()
方法重新加载解析修改过后的 xml 文件,以此保证项目对于 Mybatis 的兼容性处理。
兼容
- 在
Spring Boot
项目中,兼容mybatis-spring-boot-starter
2.0 以上版本。 - 兼容
mybatis plus3
3.0 以上版本。
安装
在 Spring Boot3.0 项目中,提供坐标地址如下:
代码语言:javascript复制<dependency>
<groupId>io.github.wayn111</groupId>
<artifactId>mybatis-xmlreload-spring-boot-starter</artifactId>
<version>3.0.5.m3</version>
</dependency>
在 Spring Boot2.0 项目中,提供坐标地址如下:
代码语言:javascript复制<dependency>
<groupId>io.github.wayn111</groupId>
<artifactId>mybatis-xmlreload-spring-boot-starter</artifactId>
<version>2.0.5.m3</version>
</dependency>
使用配置
mybatis-xmlreload-spring-boot-starter
目前只有两个配置属性。
mybatis-xml-reload.enabled
默认是 false, 也就是不启用 xml 文件的热加载功能,想要开启的话通过在项目配置文件中设置mybatis-xml-reload.enabled
为 true。mybatis-xml-reload.mapper-locations
需要热加载的 xml 文件路径,这个属性需要手动填写,跟项目中的mybatis.mapper-locations
保持一致即可。如果是多数据源配置,这里可以用逗号分割填写多个路径。也可以直接设置 xml 文件所在目录的绝对路径,例如file:/E:/GitRepo/newbeemall-pro/src/main/resources/mapper/*.xml
指向的就是本地目录下 xml 文件的绝对路径。
# mybatis xml文件热加载配置
mybatis-xml-reload:
# 是否开启 xml 热更新,true开启,false不开启,默认为false
enabled: true
# xml文件路径,可以填写多个,逗号分隔。如果想将xml文件放在指定目录而不是jar包内,可以用file前缀指定本地目录,例如 file:/c/mapper/*.xml
# eg: `classpath:mapper/**/*Mapper.xml,file:/c/mapper/*.xml`
mapper-locations: classpath:mapper/*Mapper.xml
学习交流
如果有任何问题,欢迎在 Github 上提交 Issue,方便互相交流反馈~