修炼xxl-job之调度中心—初始化国际化组件
调度中心启动时主要执行了XxlJobScheduler.init()
方法,该方法中有六个初始化动作,这篇文章来分析第一个初始化动作:初始化国际化组件。其关键调用代码为:initI18n();
国际化简介
国际化又称为i18n
,来源于国际化的英文单词internationalization
从i
到n
之间有18
个英文字母。
源码分析
我们来看一下initI18n()
方法的代码:
1 | private void initI18n(){ |
循环迭代枚举com.xxl.job.core.enums.ExecutorBlockStrategyEnum
,该枚举是执行器阻塞策略枚举。只有一个title
属性,提供了三个枚举对象:
1 | public enum ExecutorBlockStrategyEnum { |
循环中调用变异器setTitle()
方法给每个枚举对象的title
属性重新赋值。
工具类I18nUtil
的getString()
方法获取到以jobconf_block_
开头,以枚举对象名结尾的属性值。
我们来看一下工具类getString()
方法的实现:
1 | public static String getString(String key) { |
调用了静态成员方法loadI18nProp()
得到一个Properties
对象,再调用其getProperty()
方法从资源文件中获取对应key
的值。
来看一下loadI18nProp()
方法的实现:
- 读取
application.properties
配置文件的xxl.job.i18n
配置项的值; build
组装,得到i18n
文件路径。即resources\i18n
目录下的Resource Bundle 'message'
资源包文件;- 使用
Spring
提供的PropertiesLoaderUtils
工具类加载对应资源文件。
我们可以从这里知道调度中心application.properties
的配置项xxl.job.i18n
有两种配置,一是缺省不填,为中文;二是设置为en
,即英文。
去resources\i18n
目录看下资源包文件:message.properties
和message_en.properties
。搜索jobconf_block_
,得到以下内容:
message.properties
:
1 | ## job conf |
message_en.properties
:
1 | ## job conf |
可以发现键中jobconf_block_
后接的内容即为ExecutorBlockStrategyEnum
枚举的name
值。一共有三个阻塞策略:单机串行、丢弃后续调度和覆盖之前调度。
initI18n()
方法的迭代完成后,枚举的title
属性值就变成了对应的国际化设置。
总结
这篇文章主要是分析了调度中心国际化组件的初始化原理。接下来我们将继续分析调度中心启动的其它初始化动作。