Java 通用配置
(四)版本配置实现
本系列参考实现:
config: 参数配置,支持按版本设置默认值,支持用户覆盖默认配置,支持环境变量和系统变量,支持Spring配置
https://github.com/mybatis-mapper/config
版本配置设计
版本配置是提供给 模块开发者 使用的, 模块的使用者 可以使用默认的最新版本配置或者通过参数指定要使用的版本配置。
版本配置文件规范
模块开发者一般会把配置和代码一起打包,配置文件通常都在 jar 包内,所以需要从 jar 包读取资源,在读取资源时有很多情况需要考虑,如果允许配置文件出现在任意的 jar 包中,就需要对所有 jar 包中的资源进行扫描,就和 Spring 中配置的扫描包一样,指定范围越小,扫描处理越快。
综合考虑性能和功能,这里的版本配置中指定了如下的要求:
- 配置文件和版本配置子类:
- 在同一个 jar 包文件中
- 在同一个包名中
- 版本配置文件使用相同的前缀,后面带上版本号,版本号为两位,示例如下:
- mybatis-mapper-v1.0.properties
- mybatis-mapper-v1.1.properties
- mybatis-mapper-v2.0.properties
- mybatis-mapper-v2.5.properties
给自己用的工具能实现需求即可,不用为了灵活性搞的太复杂。
版本配置选择逻辑
有了上述规则后,就需要确定该使用哪个版本的配置文件。
假设项目刚开始 1.0 版本,此时组件有一些默认值设置。后期增加了新的配置,可以直接在 1.0 版本中新增,也可以创建一个和代码版本号对应的新配置文件进行维护。前一种方式操作简单,后一种方式的配置也是文档,可以清晰的展示出当前版本可以配置的参数。
当项目有不兼容的版本改动时,一定要创建新的配置文件,假设发展到2.5版本时,存在下面几个版本配置:
- mybatis-mapper-v1.0.properties
- mybatis-mapper-v1.1.properties
- mybatis-mapper-v2.0.properties
- mybatis-mapper-v2.5.properties
某个用户从 1.0 升级到 2.5 时,发现有个默认 true
的配置变成了 false
,此时如果组件支持 用户配置 ,可以直接在里面配置为 true
,如果有版本配置,就可以指定要使用的版本配置,此时指定 mapper.version=v1.0
,就会让 1.0 的配置优先级更高,如果想用 2.0 以前的配置,配置为 mapper.version=v1.9
时会使用 1.1 的配置,当指定的版本号在两个版本区间时,向下选择低版本。
选择之外的其他版本,按照版本从高到低的优先级进行获取,这种方式可以保证新版本的代码在运行时不至于找不到新的配置参数。
代码实现
当前版本配置的抽象类中,提供了下面两个抽象方法:
/** * 获取配置文件名前缀 *