背景
程序啓動時會初始化kettle的運行環境,例如,spoon啓動時main方法就會調用KettleEnvironment.init()
來爲spoon的運行環境作初始化。通過KettleEnvironment.init()
來初始化環境時,會讀取屬性文件、註冊插件等,以init()方法爲切入點,調試了一下源碼,大概整理了一下脈絡,並簡單記錄下來:
步驟
- 調用KettleClientEnvironment.init()方法初始化客戶端環境,具體的子流程以下:
- 創建.kettle目錄,並在該目錄下創建一個默認的kttle.properties文件—
createKettleHome()
- 讀取kettle.properties文件,把內容設置到系統變量中—
EnvUtil.environmentInit()
- 初始化一些日誌配置
- 註冊插件類型(5種類型)並進行初始化—
PluginRegistry.init( true )
- 創建.kettle目錄,並在該目錄下創建一個默認的kttle.properties文件—
- 如果運行在一個standalone model(例如spoon,kitche,carte),則會初始化JNDI,具體細節查看
JndiUtil.initJNDI()
- 把本地插件類型
RowDistributionPluginType,StepPluginType,PartitionerPluginType,JobEntryPluginType,LogTablePluginType,
添加到PluginRestry類的pluginTypes:List中
RepositoryPluginType,LifecyclePluginTypeKettleLifecyclePluginType,ImportRulePluginType,CartePluginType,CompressionPluginType,
AuthenticationProviderPluginType,AuthenticationConsumerPluginType - 調用
PluginRegistry.init()
進行初始化插件 - 初始化kettle變量,其實是解析kettle-variables.xml並保存裏面的配置到List裏—
KettleVariablesList.init()
- 初始化生命週期監聽器—
initLifecycleListeners()
- 初始化日誌插件—
initLoggingPlugins()