Java调用kjb文件
目录
一、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文件相关推荐
- 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。
关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...
- 关于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 ...
- java调用python文件的几种方式【超细讲解!】
java调用python的契机来自于一个项目需要用到算法,但是算法工程师们写的python,于是就有了java后端调用python脚本的需求,中间遇到了许多问题,特此记录整理了一次. 1.java调用 ...
- JAVA 调用 DLL 文件 TSCLIB.DLL TSC打印机
这是一段JAVA调用TSC条码打印机的代码:有详细的注释! 1,需要把dll文件拷贝到c:\windows\system32目录下 2,工程里面需要加载JNative.jar包(网上很多下载的) /* ...
- java 调用 swf 文件上传_java SpringMvc 实现文件在线预览(openoffice+swftools+flexpaper)
项目需求:服务器接受的文件当下只能下载之后才能浏览内容,现需要后台能在线浏览到文件内容,避免繁琐无用文件下载操作. 通过几天网上资料搜索,目前免费的在线预览开发技术使用最多还是(openoffice+ ...
- Java调用库文件(JNI)(android对此有所改变)
1.准备java 程序 testdll.java,内容为: public class testdll { static { System.loadLibrary("goodluck&qu ...
- java 调用 swf 文件上传_java文件上传方法
文件上传方法(一次上传一个文件,多个文件的话,请写循环调用) Upload.uploadFile(theFile, filePath) 说明: theFile:类型是FormFile filePath ...
- 关于Java调用dll文件的一系列问题(持续更新)
最近做项目,需要调用dll库,出现了一些问题,此处记录下,以免再踩坑. 报Unable to load library 'xxx.dll', 等错误 1.将你要用到的dll库放到 "C:\W ...
- java调用.sh文件_java 调用cmd/sh文件
最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...
最新文章
- 2018-3-18Zookeep
- iar代码优化影响运行速度吗_Java 性能优化:教你提高代码运行的效率
- 使用批处理创建文件夹,但前提是它尚不存在
- cocos2dx中的用户数据的管理
- Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号...
- boost::fusion::result_of::as_vector用法的测试程序
- 智能机浏览器版本信息获取
- 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
- Intel官宣开发RISC-V处理器:明年首发7nm工艺
- 大数据学习笔记22:MR案例——双MR统计总利润并排序
- Python3.5 配置MySql数据库连接
- SEO原创助手-SEO免费原创助手工具自动分析网站排名
- android图片自动翻转,android图片翻转镜像
- element Table+Pagination实现分页
- Linux系统平均负载的含义
- win10系统查看占用端口
- Android api level对照表
- 利用blinker,让arduino实现多路继电器状态控制和APP端状态反馈
- ajax初始化 ztree v3,zTree_v3
- 【明解C语言】选择语句之switch
热门文章
- python在单词表中查找包含所有元音字母aeiou的单词并打印
- 【Java 后端接收前端的富文本数据,其中标签样式数据丢失解决】
- linux怎样收集系统信息,Linux下收集系统和硬件信息的10个实用命令
- 构建Raspberry Pi,脉冲传感器和LCD的心跳计数器
- 解决web系统session劫持
- 技术内幕 | StarRocks Pipeline 执行框架(下)
- UE4项目聚集—为所有创意人开放的虚幻引擎
- 【ChatGPT】70 款 ChatGPT 插件评测:惊艳的开发过程与宏大的商业化愿景
- Java面试题大全(Android版)
- springCloud学习【4】之elasticsearch(1)