前面介绍过关于在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文件配置。
2.除了kettle的几个jar之外,记得将kettle工具下的simple-jndi的jar包放进项目。
3.调用kettle的环境初始化方法KettleEnvironment.init(true);看kettle源码即可知道,该方法的参数为true就表示为需要调用初始化jndi。
4.在调用该方法之前,除了其它的参数之外,需要下面几行代码,这就是最重要的了:
File file = new File(path);//这个path就是jdbc.prtoperties文件的配置路径,指向上层文件夹路径即可,建议是绝对路径。
path = file.getCanonicalPath();
Const.JNDI_DIRECTORY = path;
System.setProperty( "java.naming.factory.initial", "org.osjava.sj.SimpleContextFactory" );
System.setProperty( "org.osjava.sj.root", path);
System.setProperty( "org.osjava.sj.delimiter", "/" );
5.调用其它方法即可。
基于上面获取绝对路径的方法,可以参照我下面的,当然我感觉我的比较繁琐一点,这个根据自己实际项目来即可。
String mClassPath = Thread.currentThread().getContextClassLoader().getResource("").toString();
String tClassPath=mClassPath.substring(mClassPath.indexOf("/")+1, mClassPath.indexOf("ui"))+"simple-jndi";
如果有其他意见和建议,大家可以一起交流,学无止境,一起进步。