目录

一、kjb和ktr文件创建

kjb文件

ktr文件

关联kjb和ktr

变量信息

二、 Java代码调用kjb

引包

放入kjb和ktr文件

三、代码调用

定时任务


一、kjb和ktr文件创建

kjb文件

首先先新建一个Job,如下图所示,这样就新建了一个kjb文件,即一个可以被java运行的job。

ktr文件

然后创建一个ktr文件,即如下图所示

关于其中的元素,不过多的介绍了。

关联kjb和ktr

接着将kjb文件和ktr关联起来,如下图所示,右击,然后编辑作业入口,

在浏览处选择对应的ktr文件,

如果要查看 转换对应的ktr文件,直接双击转换这个节点就行。

变量信息

在kjb文件的空白处双击,出现如下图界面,这是用来设置全局变量的。

在ktr文件处也可以双击,设置ktr的文件变量,

这些变量可以设置默认值,也可以通过Java代码调用时传递进来。

如果要获取到变量,如下图所示的节点,${auth_code}是获取变量值。

在表输入中就可以使用上面获取的变量来作为入参,如下图所示。

OK,基本的元素就不介绍了,介绍变量是因为Java代码中需要使用,重点还是Java代码如何调用kjb文件。

二、 Java代码调用kjb

引包

肯定是要引入kettle的jar包的,kettle的包就是放在本地,而不是从maven仓库中获取的,

 <dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-core</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\kettle-core-9.0.0.0-423.jar</systemPath>
</dependency>
<dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-engine</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\kettle-engine-9.0.0.0-423.jar</systemPath>
</dependency>
<dependency><groupId>pentaho-kettle</groupId><artifactId>matastore</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\metastore-9.0.0.0-423.jar</systemPath>
</dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>commons-vfs2</artifactId><version>2.2</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\commons-vfs2-2.2.jar</systemPath>
</dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>jsch</artifactId><version>0.1.54</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\jsch-0.1.54.jar</systemPath>
</dependency>

本项目搭建的是一个spring boot的工程,所以spring boot的所需jar包也要,还有数据库连接的包,完整的pom.xml文件如下面所示,

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.fable.jsst</groupId><artifactId>kettle-server</artifactId><version>0.0.1-SNAPSHOT</version><name>kettle-server</name><description>kettle-server</description><properties><java.version>1.8</java.version><start-class>com.fable.jsst.kettleserver.KettleServerApplication</start-class></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-core</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\kettle-core-9.0.0.0-423.jar</systemPath></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>kettle-engine</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\kettle-engine-9.0.0.0-423.jar</systemPath></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>matastore</artifactId><version>9.0.0.0-423</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\metastore-9.0.0.0-423.jar</systemPath></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>commons-vfs2</artifactId><version>2.2</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\commons-vfs2-2.2.jar</systemPath></dependency><dependency><groupId>pentaho-kettle</groupId><artifactId>jsch</artifactId><version>0.1.54</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\jsch-0.1.54.jar</systemPath></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.2.0</version><scope>system</scope><systemPath>${project.basedir}\src\main\resources\libs\ojdbc14-10.2.0.2.0.jar</systemPath></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-vfs2</artifactId><version>2.2</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>17.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.0</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>net.sf.scannotation</groupId><artifactId>scannotation</artifactId><version>1.0.2</version><exclusions><exclusion><groupId>javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.12.Final</version><scope>compile</scope></dependency><!--<dependency><groupId>javax.transaction</groupId><artifactId>javax.transaction-api</artifactId><version>1.2</version><scope>compile</scope></dependency>--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.2.3.Final</version></dependency><dependency><groupId>com.slyak</groupId><artifactId>spring-data-jpa-extra</artifactId><version>3.0.0.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><!--包含本地jar包--><includeSystemScope>true</includeSystemScope><mainClass>${start-class}</mainClass></configuration></plugin></plugins></build></project>

放入kjb和ktr文件

此处是为了能让代码找到对应路径,其实也可以在项目配置下路劲即可。

如下图所示,这是我配置的本地调试路径,当然也可以设置为Linux的路径。

文件的话是保存在此处的,

项目部署在Linux上,所以Linux上是如此配置的

application-prod.prpperties

这个application-prod.properties是下面代码调用出的spring boot工程,即kettle-server工程

而组件等是安装在kettle目录下,即kettle工具的linux版,同样kjb和ktr文件也放在此处。

三、代码调用

定时任务

/*** 任务:合表*/
@Scheduled(cron = "0 0/30 * * * ?")
public void collectJobTask() {log.info("定时任务合表开始。。。");kettleService.startCollectJob();log.info("定时任务合表结束。。。");
}

一个定时任务的代码,调用service,进行具体的逻辑。

service中有两步,第一步获取参数,刚才在kjb和ktr中设置的参数需要修改,第二就是运行job

/*** 合表*/
@Override
public void startCollectJob() {Map<String, String> params = setCollectParam();log.info("开始执行【合表】任务...");long startTime = System.currentTimeMillis();//todo job 地址需修改runJob(params, env.getProperty("kettle.collect.job.path"));long endTime = System.currentTimeMillis();log.info("【合表】任务结束,耗时{}s", (endTime - startTime) / 1000);
}

第一步获取参数是setCollectParam方法,此方法如下,获取application.properties中配置的数据,放入map中即可。

Map<String, String> params = new HashMap<>();
//  从配置文件读取源(省、市、区)、目标配置
//省
params.put("jlk_ip", env.getProperty("kettle.jlk.ip"));
params.put("jlk_db", env.getProperty("kettle.jlk.db"));
params.put("jlk_port", env.getProperty("kettle.jlk.port"));
params.put("jlk_pwd", env.getProperty("kettle.jlk.pwd"));
params.put("jlk_username", env.getProperty("kettle.jlk.username"));

env是spring的一个类org.springframework.core.env.Environment

第二步是runJob方法,下面的kettle.collect.job.path就是配置在application.prpoerties中的kjb路径,现在就获取了。

kettle.collect.job.path

runJob(params, env.getProperty("kettle.collect.job.path"));

下面这个就是运行的job的方法了,

/*** 运行作业文件** @param params  作业参数* @param kjbPath 作业文件路径,后缀kjb*/
private void runJob(Map<String, String> params, String kjbPath) {try {StepPluginType.getInstance().getPluginFolders().add(new PluginFolder(env.getProperty("kettle.utils.plugins.path"), false, true));KettleEnvironment.init();JobMeta jobMeta = new JobMeta(kjbPath, null);// 配置作业参数for (String param : params.keySet()) {jobMeta.setParameterValue(param, params.get(param));}Job job = new Job(null, jobMeta);// 设置日志级别job.setLogLevel(LogLevel.ERROR);log.info("启动作业...");job.start();log.info("等待作业执行完毕...");job.waitUntilFinished();if (job.getErrors() > 0) {log.info("作业执行出错!");throw new Exception("作业执行出错");}} catch (Exception e) {log.info("作业执行异常!", e);}
}

初始化插件

StepPluginType.getInstance().getPluginFolders().add(new PluginFolder(env.getProperty("kettle.utils.plugins.path"), false, true));

插件就是下图工具中的东西,本地调试可以这么搞,如果是部署在Linux上,那么就要配置安装在linux上的工具插件位置。

kettle环境初始化,

KettleEnvironment.init();

此时此处可以放在Application类中,即运行spring boot时就初始化,没必要每次schedule就初始化一次,费时间。

即下面这样。

@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.fable")
public class KettleServerApplication {public static void main(String[] args) {KettleEnvironment.init();SpringApplication.run(KettleServerApplication.class, args);}}

将kjb加载到job元数据类中。

JobMeta jobMeta = new JobMeta(kjbPath, null);

设置参数

for (String param : params.keySet()) {jobMeta.setParameterValue(param, params.get(param));
}

设置Job,即能独立跑的一个类,相当于开个线程,这么理解。

Job job = new Job(null, jobMeta);job.start();

Java调用kjb文件相关推荐

  1. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

  2. 关于java调用Dll文件的异常 Native library (win32-x86-64/CtrlNPCDLL.dll) not found in resource pat

    关于java调用Dll文件的异常 Native library (win32-x86-64/CtrlNPCDLL.dll) not found in resource pat 参考文章: (1)关于j ...

  3. java调用python文件的几种方式【超细讲解!】

    java调用python的契机来自于一个项目需要用到算法,但是算法工程师们写的python,于是就有了java后端调用python脚本的需求,中间遇到了许多问题,特此记录整理了一次. 1.java调用 ...

  4. JAVA 调用 DLL 文件 TSCLIB.DLL TSC打印机

    这是一段JAVA调用TSC条码打印机的代码:有详细的注释! 1,需要把dll文件拷贝到c:\windows\system32目录下 2,工程里面需要加载JNative.jar包(网上很多下载的) /* ...

  5. java 调用 swf 文件上传_java SpringMvc 实现文件在线预览(openoffice+swftools+flexpaper)

    项目需求:服务器接受的文件当下只能下载之后才能浏览内容,现需要后台能在线浏览到文件内容,避免繁琐无用文件下载操作. 通过几天网上资料搜索,目前免费的在线预览开发技术使用最多还是(openoffice+ ...

  6. Java调用库文件(JNI)(android对此有所改变)

    1.准备java 程序 testdll.java,内容为: public class testdll {  static {  System.loadLibrary("goodluck&qu ...

  7. java 调用 swf 文件上传_java文件上传方法

    文件上传方法(一次上传一个文件,多个文件的话,请写循环调用) Upload.uploadFile(theFile, filePath) 说明: theFile:类型是FormFile filePath ...

  8. 关于Java调用dll文件的一系列问题(持续更新)

    最近做项目,需要调用dll库,出现了一些问题,此处记录下,以免再踩坑. 报Unable to load library 'xxx.dll', 等错误 1.将你要用到的dll库放到 "C:\W ...

  9. java调用.sh文件_java 调用cmd/sh文件

    最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...

最新文章

  1. 2018-3-18Zookeep
  2. iar代码优化影响运行速度吗_Java 性能优化:教你提高代码运行的效率
  3. 使用批处理创建文件夹,但前提是它尚不存在
  4. cocos2dx中的用户数据的管理
  5. Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号...
  6. boost::fusion::result_of::as_vector用法的测试程序
  7. 智能机浏览器版本信息获取
  8. 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
  9. Intel官宣开发RISC-V处理器:明年首发7nm工艺
  10. 大数据学习笔记22:MR案例——双MR统计总利润并排序
  11. Python3.5 配置MySql数据库连接
  12. SEO原创助手-SEO免费原创助手工具自动分析网站排名
  13. android图片自动翻转,android图片翻转镜像
  14. element Table+Pagination实现分页
  15. Linux系统平均负载的含义
  16. win10系统查看占用端口
  17. Android api level对照表
  18. 利用blinker,让arduino实现多路继电器状态控制和APP端状态反馈
  19. ajax初始化 ztree v3,zTree_v3
  20. 【明解C语言】选择语句之switch

热门文章

  1. python在单词表中查找包含所有元音字母aeiou的单词并打印
  2. 【Java 后端接收前端的富文本数据,其中标签样式数据丢失解决】
  3. linux怎样收集系统信息,Linux下收集系统和硬件信息的10个实用命令
  4. 构建Raspberry Pi,脉冲传感器和LCD的心跳计数器
  5. 解决web系统session劫持
  6. 技术内幕 | StarRocks Pipeline 执行框架(下)
  7. UE4项目聚集—为所有创意人开放的虚幻引擎
  8. 【ChatGPT】70 款 ChatGPT 插件评测:惊艳的开发过程与宏大的商业化愿景
  9. Java面试题大全(Android版)
  10. springCloud学习【4】之elasticsearch(1)