kettle作為一款開源etl工具劫流,在數(shù)據(jù)倉庫領(lǐng)域的應(yīng)用還算是比較廣泛的,做過數(shù)倉的朋友應(yīng)該都知道蔬浙,在做etl開發(fā)的時候铝耻,對于參數(shù)變量的引用是時常出現(xiàn)的場景誊爹,對于一些公共的變量,kettle的做法是啟動的時候默認(rèn)讀取用戶目錄下一個kettle.properties文件瓢捉,這種做法維護(hù)起來不是特別方便频丘,如果服務(wù)器有多臺每次新增變量,每臺服務(wù)器都需要維護(hù)泡态,為了解決這個問題搂漠,可以通過修改kettle源碼從數(shù)據(jù)庫讀取達(dá)到目的。
源碼編譯步驟(本文采用idea工具編譯)
工具下載:
kettle源碼下載:https://github.com/pentaho/pentaho-kettle/tree/8.0.0.0-R
kettle客戶端下載:https://sourceforge.net/projects/pentaho/files
maven下載:http://maven.apache.org/download.cgi-
idea導(dǎo)入工程
解壓下好的源碼某弦,idea選擇源碼目錄pom.xml
打開UI模塊桐汤,修改swt的maven地址為org.eclipse.swt.win32.win32.x86_64,不然會報錯靶壮,因?yàn)槟J(rèn)引用的是Linux的jar包怔毛,我們換成Windows的
然后將客戶端里的目錄data-integration\ui下的文件復(fù)制到工程的pentaho-kettle-8.0.0.0-R\ui\src\main\resources\ui目錄下,這里是一些資源文件
等待idea自動導(dǎo)入依賴jar包腾降。拣度。。螃壤。抗果。 -
啟動Spoon.java類
kettle的啟動類是org.pentaho.di.ui.spoon.Spoon,這時候啟動這個類不出意外kettle的界面就出來了
修改源碼
找到類org.pentaho.di.core.util.EnvUtil
environmentInit這個方法會讀取kettle.properties配置文件加載到kettle全局變量
源碼如下:
Map<Object, Object> kettleProperties = EnvUtil.readProperties( Const.KETTLE_PROPERTIES );
insertDefaultValues( kettleProperties );
applyKettleProperties( kettleProperties );
我們添加一個方法奸晴,調(diào)用一次就OK了:
private static void getMysqlParam() {
Properties pro = new Properties();
String key = "";
String value = "";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://xx.xx.xx.xx/xx?useUnicode=true&characterEncoding=utf8",
"xxxx", "xxxxxx");
Statement stat = conn.createStatement();
ResultSet rst = stat.executeQuery("select t.key,t.value from table t ");
while (rst.next()) {
key = rst.getString(1);
value = rst.getString(2);
//System.out.println(key + "---->" + value);
pro.put(key, value);
}
insertDefaultValues(pro);
applyKettleProperties(pro);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
- maven打包
到項(xiàng)目所在目錄執(zhí)行命令
mvn clean install --settings C:\Users\xn043275.m2\settings.xml -Dmaven.test.skip=true
生成的目標(biāo)文件路徑在pentaho-kettle-8.0.0.0-R\assemblies\pdi-ce\target
分享就到這里冤馏,謝謝大家!