前面介绍过关于在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更新)

 另外放一个小广告,买东西能拿到隐藏的优惠券和使用优惠券的佣金,能省为啥不省呢!下面微信也可探讨技术哦,期待一起研究

 

通知🗣
推广副业小号,主营:淘宝、拼多多、京东,返利优惠,全程自动查询,自动回复