背景
程序启动时会初始化kettle的运行环境,例如,spoon启动时main方法就会调用KettleEnvironment.init()
来为spoon的运行环境作初始化。通过KettleEnvironment.init()
来初始化环境时,会读取属性文件、注册插件等,以init()方法为切入点,调试了一下源码,大概整理了一下脉络,并简单记录下来:
步骤
- 调用KettleClientEnvironment.init()方法初始化客户端环境,具体的子流程以下:
- 创建.kettle目录,并在该目录下创建一个默认的kttle.properties文件—
createKettleHome()
- 读取kettle.properties文件,把内容设置到系统变量中—
EnvUtil.environmentInit()
- 初始化一些日志配置
- 注册插件类型(5种类型)并进行初始化—
PluginRegistry.init( true )
- 如果运行在一个standalone model(例如spoon,kitche,carte),则会初始化JNDI,具体细节查看
JndiUtil.initJNDI()
- 把本地插件类型
RowDistributionPluginType,StepPluginType,PartitionerPluginType,JobEntryPluginType,LogTablePluginType, RepositoryPluginType,LifecyclePluginTypeKettleLifecyclePluginType,ImportRulePluginType,CartePluginType,CompressionPluginType, AuthenticationProviderPluginType,AuthenticationConsumerPluginType
添加到PluginRestry类的**pluginTypes:List**中 - 调用
PluginRegistry.init()
进行初始化插件 - 初始化kettle变量,其实是解析kettle-variables.xml并保存里面的配置到List里—
KettleVariablesList.init()
- 初始化生命周期监听器—
initLifecycleListeners()
- 初始化日志插件—
initLoggingPlugins()