先说下简单的驱动问题,当仅是使用kettle工具测试就报错mysql驱动问题,那就是你的kettle文件下的lib中没有增加mysql驱动包,如下图(注意:增加驱动版本最好和你的mysql库的版本一致,免得有其它麻烦):
一、第一个问题及解决
接下来说我的问题,阶段如下:
1.本来使用6.1版本的kettle,领导要求更换9.1版本,给9.1kettle中lib下增加完驱动后,java项目调用kettle仍是报驱动文件找不到。
2.想着驱动文件找不到是不是因为我项目模块里没有增加驱动依赖,故又去查看,发现我的项目模块里确实没有,新增依赖调用还是报错org.gjt.mm.mysql.Driver找不到!(最后发现与此无关,最后我将依赖删除了。kettle的jar包中应该是自己封装了驱动,经测试我感觉它封装的是固定的某个老版驱动,每次都要走org.gjt.mm.mysql.Driver)
3.因为“org.gjt.mm.mysql.Driver”是mysql是老版本mysql驱动包中的,我将kettle工具中的mysql驱动包降版本到5.x.xx后仍然出现了各种花里胡哨的包路径问题。最后没辙了,我想到是不是我的项目模块中的kettle的jar有问题,查看后发现使用的是5.4.0.1-130,而我调用的kettle工具lib下的版本已是9.1.0.0-324版本。
4.换jar包,9.1版本涉及的jar如下:
kettle-dbdialog-9.1.0.0-324.jar、kettle-engine-9.1.0.0-324.jar、kettle-core-9.1.0.0-324.jar、commons-vfs2-2.3.jar、pentaho-encryption-support-9.1.0.0-324.jar、metastore-9.1.0.0-324.jar、guava-17.0.jar
5.jar换完之后还需要在项目模块的resource文件夹下新增 kettle-password-encoder-plugins.xml文件,内容为:
<password-encoder-plugins>
<password-encoder-plugin id="kettle">
<description>kettle Password Encoder</description>
<classname>org.pentaho.di.core.encryption.KettleTwoWayPasswordEncoder</classname>
</password-encoder-plugin>
</password-encoder-plugins>
完成以上操作后,我用idea重新调用,程序可正常调用,到此解决的方式就是保持版本一致:项目中的kettlejar包和kettle工具中的jar包一致。但是!到此并没有结束,接下来我开了我的第二个问题。
二、第二个问题及解决
第二个问题是这样产生的:在第一个问题中我说我将项目和kettle工具中的kettlejar包保持了一致,且用idea调用测试没有问题。我的项目是maven项目,后来打包发布到tomcat再次测试,又又出现了找不到驱动“org.gjt.mm.mysql.Driver”。
这次问题的解决没有那么曲折,上面我说了我测试感觉项目中的kettle包内是自我封装了mysql的驱动,而且是老版本的mysql驱动,所以无论kettle工具中我给的只要不是和它默认对得上的版本都会报错找不到驱动“org.gjt.mm.mysql.Driver”,故此情况有两种解决方式:
1.要么将项目中和kettle工具中的mysql驱动降到项目中kettlejar包所要求的版本,但这不现实,我项目版本不可能因为一个kettle调整。
2.如果1中不行,那只能采用第二种,自定义kettle工具数据库连接,直接上图吧,不啰嗦了:
以上是我的个人情况,写的杂乱,写的啰嗦,但只是用于个人记录,参考的同学仅参考就行。