背景介绍
由于系统需要从sql server 远程数据库抓取数据存储到当前数据库(mysql)中,所以采用了kettle来进行数据抽取。使用spoon图形化工具进行ktr文件的编写。测试通过后,想集成进项目中,然而遇到以下问题:
- 首先,kettle的jar包引入,在一些共有的maven库中找不到相关jar包。所以从spoon客户端中,拷贝出jar包,然后加入本地maven库。主要包括kettle-core、kettle-engine、metastore、commons-vfs2、commons-lang。
mvn install:install-file -DgroupId=pentaho-kettle
-DartifactId=kettle-core
-Dversion=7.1.0.0-12
-Dpackaging=jar -Dfile=pentaho-kettle.jar
- 其次,将项目部署到linux服务器后,发现kettle读不到ktr文件,查看堆栈信息,发现路径正常。
org.pentaho.di.core.exception.KettleXMLException:
Unable to read file [file:///pws.jar!/BOOT-INF/classes!/kettle/userInfo.ktr]
Could not read from "file:///pws.jar!/BOOT-INF/classes!/kettle/userInfo.ktr" because it is a not a file.
at org.pentaho.di.core.xml.XMLHandler.loadXMLFile(XMLHandler.java:561)
at org.pentaho.di.core.xml.XMLHandler.loadXMLFile(XMLHandler.java:540)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2742)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2710)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2687)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2667)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2632)
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2595)
at cn.pioneer.pws.service.impl.KettleServiceImpl.synchronizationInfo(KettleServiceImpl.java:50)
at cn.pioneer.pws.service.impl.KettleServiceImpl.synchroUserData(KettleServiceImpl.java:29)
at cn.pioneer.pws.controller.KettleController.synchroUserData(KettleController.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native