java項目中使用kettle的JNDI連接配置


       前面介紹過關於在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更新)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM