前面介紹過關於在kettle工具中怎么使用JNDI配置,更多的我們可能是需要在java項目中使用JNDI的配置,剛開始網上查了好多資料,都是說的在tomcat的配置文件里面配置JNDI連接信息,按照此,怎么配置都不對,后來仔細分析了下,是不適用的。
為了解決這個問題,自己搭建了kettle的源碼,我搭建的是kettle8.0.0的版本,注意的是,kettle8.0.0的源碼文件結構和之前的版本已經不一樣了,所以搭建的時候要注意,如果后面有時間,一定分享給大家。本篇博客說下java項目中怎么使用JNDI的配置。
其實也是簡單的,通過kettle的源碼即可分析出來,其實代碼也是kettle源碼的。
1.將JNDI配置文件放在一個指定的目錄下(這個看自己),如我的就在項目根目錄下simple-jndi/jdbc.properties:
里面的配置信息同kettle工具里面的JNDI文件配置。(可以參照我的另一篇博客關於JNDI的配置)

2.除了kettle的幾個jar之外,記得將kettle工具下的simple-jndi的jar包放進項目。

3.調用kettle的環境初始化方法KettleEnvironment.init(true);看kettle源碼即可知道,該方法的參數為true就表示為需要調用初始化jndi。
4.在調用該方法之前,除了其它的參數之外,需要下面幾行代碼,這就是最重要的了:
//JNDI的加載
file = new File(jndiFPath);// 這個path就是jdbc.prtoperties文件的配置路徑,指向上層文件夾路徑即可,建議是絕對路徑。
sysPath = file.getCanonicalPath();
Const.JNDI_DIRECTORY = sysPath;
//kettle環境的加載,kettle的運行需要初始化kettle_home的路徑,這個可以配置,一般默認都是在user.dir下面,,所以下面
//代碼是先獲取默認的kettle_home路徑,然后變更指定到新的目錄下,並且初始化kettle環境,所以直接指定該路徑也是可以
//的
String user_dir=System.getProperty("user.dir");
String newHome=user_dir+File.separator+"WebContent"+File.separator+"WEB-INF";
System.setProperty("KETTLE_HOME", newHome);
System.setProperty("user.dir", newHome);
KettleEnvironment.init(true);
EnvUtil.environmentInit();
System.setProperty("user.dir",user_dir);
5.調用其它方法即可。
樣例
//ktr文件路徑加載
TransMeta trm = new TransMeta(ktr的路徑);
trans = new Trans(trm);
//轉換里面如果用到了參數,初始化參數,按照轉換里面的參數順序
trans.setVariable("dateupsdate", dateupsdate);
trans.setVariable("dateupstime", dateupstime);
trans.setVariable("dateupedate", dateupedate);
trans.setVariable("dateupetime", dateupetime);
//執行
trans.execute(null);
trans.waitUntilFinished();
基於上面獲取絕對路徑的方法,可以參照我下面的,當然我感覺我的比較繁瑣一點,這個根據自己實際項目來即可。但是真的
建議使用絕對路徑並配置到數據庫里面,每次直接取就可以。
String mClassPath = Thread.currentThread().getContextClassLoader().getResource("").toString();
String tClassPath=mClassPath.substring(mClassPath.indexOf("/")+1, mClassPath.indexOf("ui"))+"simple-jndi";
如果有其他意見和建議,大家可以一起交流,學無止境,一起進步。
備注:(2020-2-20更新)
