节前最后一篇文章,祝大家国庆快乐

2023-09-28 17:32:53 浏览数 (2)

本文是 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 版本更新内容

  1. 修复项目开启全局懒加载时,MybatisXmlReloadConfiguration 类未生效的问题。
  2. 修复生产环境修改 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.nioWatchService 来实现,当我们监听了整个 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 文件的绝对路径。
代码语言:javascript复制
# 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,方便互相交流反馈~

0 人点赞