Mybatis自动刷新XML
2020-12-17 本文已影响0人
孤山之王
使用Mybatis过程中,很多时候修改了XML文件需要整个项目重新启动,比较耗时,如果没什么业务数据状态还好,有数据状态可就惨啦,所以XML自动线下更新就很有必要。手写一个简单实现,大家参考下。
我的实现思路就是利用一个额外线程扫描mybatis
XML文件,更新到 Spring
中的 上下文ApplicationContext
中。

1. 配置文件
我们定义一套刷新时间和周期频次的配置文件在路径 persistence-mybatis\mybatis-base\src\main\resources\conf\mybatis-refresh.properties
中,里面内容如下:
enabled=true
delaySeconds=30
sleepSeconds=10
mappingPath=mapper
- enabled:是否开启自动刷新
- delaySeconds: 间隔时间
- sleepSeconds: 休眠时间
- mappingPath:XML的路径
核心类需要实现上下文接口 ApplicationContextAware
。
2. 关键步骤
- @Override重写
setApplicationContext
方法 - 用静态语句块,初始化配置文件中的相关参数
- @PostConstruct:在构造函数之后对
SqlSessionFactory
进行额外配置 - 启用线程按照频次间隔重复执行上述操作
关键性步骤如下:
// 1、从上下文容器获取 SqlSessionFactory
SqlSessionFactory sessionFactory = applicationContext.getBean(SqlSessionFactory.class);
// 2、获取Configuration
Configuration configuration = sessionFactory.getConfiguration();
this.configuration = configuration;
// 3、扫描Locations
mapperLocations = getResource(basePackage,XML_RESOURCE_PATTERN);
// 4、启动线程执行
exeTask();
核心类在akkad-base\persistence-mybatis\mybatis-base\src\main\java\xyz\wongs\drunkard\base\persistence\mybatis\loader\MapperAutoRefresh.java
下,而且行数太长,代码就不贴。
在多线程处理这块有需要注意有一定的线程使用基础,看官自行学习。
3. 源码地址,如果觉得对你有帮助,请Star
