这几天小白得到了一个任务,需要写一个简单的程序,执行本地的ktr文件,ktr文件中会更新数据库数据,且数据库连接信息需从执行这段程序的机器的资源库中获取,再次记录下这段程序。

目录

工程

代码

依赖

ktr文件


工程

首先,新建一个springboot工程,方便将依赖包打包进jar文件。

代码

然后main函数代码如下代码所示,其中有的变量我重新命名了下。

package com.xxxx.xxxxa;import xxxxxx;@SpringBootApplication
public class xxxxApplication {public static void main(String[] args) throws Exception{KettleEnvironment.init();//初始化环境RepositoriesMeta repositoriesMeta = new RepositoriesMeta();if (repositoriesMeta.readData()) {KettleDatabaseRepositoryMeta xxxRepo = (KettleDatabaseRepositoryMeta) repositoriesMeta.searchRepository("xxx-repo");String databaseMetaName = (null == xxxRepo ? "xxx-repo-connection" : xxxRepo.getConnection().getName());DatabaseMeta xxxRepoConn = repositoriesMeta.searchDatabase(databaseMetaName);System.out.println("连接名称:" + xxxRepoConn);if (null == xxxRepoConn) {throw new Exception("xxx资源库配置有误,请重新配置后再次运行!");} else {// 数据库信息确认Scanner sc = new Scanner(System.in);System.out.println("请确认需要执行的数据库信息,如正确,输入Y后回车执行;如错误,请检查xxx资源库配置。");System.out.println("数据库类型:" + xxxRepoConn.getPluginId()); //数据库类型System.out.println("连接地址:" + xxxRepoConn.getHostname()); //连接地址System.out.println("数据库名称" + xxxRepoConn.getDatabaseName()); //数据库名称System.out.println("端口" + xxxRepoConn.getDatabasePortNumberString()); //端口System.out.println("用户" + xxxRepoConn.getUsername()); //用户String indexStr = sc.nextLine();if(!"Y".equalsIgnoreCase(indexStr)){throw new Exception("取消执行!");}String errorFile = null;String dir = new ApplicationHome().toString() + "/ktrs/" ;System.out.println(new ApplicationHome());System.out.println(dir);File file = new File(dir);File[] tempList = file.listFiles();for (int i = 0; i < tempList.length; i++) {if (tempList[i].isFile() && tempList[i].getName().endsWith(".ktr")) {System.out.println("文件路径:" + dir + tempList[i].getName());TransMeta transMeta = new TransMeta(dir + tempList[i].getName());//new tran的源数据对象// 设置数据库信息List<DatabaseMeta> dmlist=transMeta.getDatabases();for(DatabaseMeta dm : dmlist){dm.setDatabaseType(xxxRepoConn.getPluginId()); //数据库类型dm.setHostname(xxxRepoConn.getHostname()); //连接地址dm.setDBName(xxxRepoConn.getDatabaseName()); //数据库名称dm.setDBPort(xxxRepoConn.getDatabasePortNumberString()); //端口dm.setUsername(xxxRepoConn.getUsername()); //用户dm.setPassword(xxxRepoConn.getPassword()); //密码}Trans trans = new Trans(transMeta);//创建tran对象trans.prepareExecution(null);//异常处理trans.startThreads();//开始执行trans.waitUntilFinished();//等待执行完毕if(trans.getErrors()!=0){errorFile += tempList[i].getName() + ";";System.out.println("Error encountered!");} else {tempList[i].delete();}}}if (null == errorFile) {System.out.println("执行成功!");} else {System.out.println("执行完成!其中失败的转换为:" + errorFile);}}}}
}

依赖

想要能运行起来这段代码,还需要增加很多依赖,因为有些依赖缺失是可以启动的,当你运行的时候才会报"class not found",我接下来贴出来我的pom文件,支持三个数据库,分别为Oracle,sqlserver,达梦数据库。

注意:由于kettle的包无法通过maven下载,所以需要自己先下载,然后通过maven的<scope> <systemPath>这两个标签进行设置。

    <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></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-crypto</artifactId><version>5.3.2</version><scope>compile</scope></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version><scope>compile</scope></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version><scope>compile</scope></dependency><dependency><groupId>org.pentaho.di</groupId><artifactId>kettle-engine</artifactId><version>8.2.0.0</version><scope>system</scope><systemPath>${project.basedir}/src/lib/xxxxxxxxxx.jar</systemPath></dependency><dependency><groupId>org.pentaho.di</groupId><artifactId>kettle-core</artifactId><version>8.2.0.0</version><scope>system</scope><systemPath>${project.basedir}/src/lib/xxxxx.jar</systemPath></dependency><dependency><groupId>org.pentaho.metastore</groupId><artifactId>metastore</artifactId><version>8.2.0.0</version><scope>system</scope><systemPath>${project.basedir}/src/lib/xxxxx.jar</systemPath></dependency><dependency><groupId>net.sourceforge.jtds</groupId><artifactId>jtds</artifactId><version>1.2.5</version><scope>system</scope><systemPath>${project.basedir}/src/lib/xxxxx.jar</systemPath></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-vfs2</artifactId><version>2.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>25.1-jre</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId>// oracle数据库驱动<version>xxxxxx</version></dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId>// sqlserver数据库驱动<version>xxxxxxx</version></dependency><dependency><groupId>com.dameng</groupId><artifactId>Dm7JdbcDriver18</artifactId>//  达梦数据库驱动<version>xxxxxxx</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layout>ZIP</layout><fork>true</fork><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build>

ktr文件

最后打包,在jar包同级别命名一个ktrs文件夹,将需要执行的ktr文件放入其中即可。

KETTLE:通过代码运行本地ktr文件相关推荐

  1. html调用点击运行本地py文件,实现HTML调用打开本地软件文件

    有时候我们想要实现一个功能,就是在HTML页面点击一个链接就能调用打开本地可执行文件.就像腾讯QQ.迅雷这种. 而实现这种功能其实也很简单,就是需要我们添加修改注册表,实现自定义URL Protoco ...

  2. 视觉SLAM——ORB-SLAM3运行本地视频文件

    一.采用D435i摄像头采集一段视频video.mp4 二.准备好两个文件:myvideo.yaml和myvideo.cpp myvideo.yaml %YAML:1.0#-------------- ...

  3. Java代码实现本地创建文件,读取文件,删除指定目录下的文件

    目录 一.需求: 二.实现: 1.完成创建文件,写入文件 2.读取文件 3.删除文件 测试: 注意: java的split方法分割字符串(分隔符如* | . ^ )及注意点 一.需求: 1.创建文件夹 ...

  4. java 原生 json 转 xml java json转xml 实现代码 读取本地json文件 转成 xml数据 用springboot 发布xml格式数据

    结果xml截图 json数据 main启动 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; ...

  5. jquery ajax json文件,jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  6. Hadoop入门(10)_通过java代码实现从本地的文件上传到Hadoop的文件系统

    2019独角兽企业重金招聘Python工程师标准>>> 第一步:首先搭建java的编译环境.创建一个Java Project工程,名为upload. 第二步:选中所需的Jar包.   ...

  7. python下载大文件mp4_Python代码打开本地.mp4格式文件的方法

    Python代码打开本地.mp4格式文件的方法 想通过编写Python代码来打开本地的.mp4格式文件,使用os模块来操作文件.我的电脑默认的是QQ影音播放器,执行Python代码打开默认播放器,播放 ...

  8. 获取远程服务器代码到本地文件,获取远程服务器代码到本地文件

    获取远程服务器代码到本地文件 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Wind ...

  9. 调用别人服务器运行本地文件方法

    调用别人服务器运行本地文件方法 登录服务器 ssh july-gpu 复制文件run_cnn.py到服务器 在本地终端运行: scp /Users/apple/Documents/ST/python/ ...

  10. c代码中 执行sh文件 带参数_创建含有$1参数的Bash脚本以及运行脚本的三种方法...

    一.先创建一个简易脚本 要求: 1.创建一个名为demo.sh的文件,如果该脚本后跟上文件名某某某,就会产生一个名为某某的文件夹 2.某某某文件内要有一个index.html及文件夹css和文件夹js ...

最新文章

  1. maven 简易入门笔记
  2. CentOS7安装xfce桌面环境
  3. jenkins+git+maven搭建项目自动化持续集成
  4. 设计微服务架构需要掌握的基础知识
  5. 30 本 Python 新书《谁说菜鸟不会数据分析》,包邮送到你手上!!
  6. python学习之路 一 :编程语言介绍
  7. python如何更改entry属性_如何在Python3中更改Gtk3 Entry文本颜色?
  8. python @cached_property
  9. 想学人工智能从哪入手?
  10. mysql 不执行索引_mysql使用不上索引的几种情况
  11. Java---遍历Map集合的三种方式
  12. c语言更改记事本改为大写,记事本里的字母大写转换成小写怎么弄 编写一个汇编程序要...
  13. MySQL 怎么插入10天前的日期_Mysql笔记
  14. 考研笔记——王道C语言
  15. docker-ce 的安装与镜像加速
  16. DP(Nietzsche)的hu测 T2(dp)
  17. 餐饮服务设备行业的互联网趋势
  18. 30个有发展前景的创业项目
  19. Python_Python遍历列表的四种方法
  20. Java 类文章 - 收藏集 - 掘金

热门文章

  1. countifs多条件排序_使用Excel COUNTIFS进行多个条件计数
  2. 微信原版提示音_微信提示音阿豆下载-抖音微信提示音iosv2.1.3_5577安卓网
  3. 大学实验室面试总结(机器学习)
  4. Emacs之魂(七):变量捕获与卫生宏
  5. PDF怎么修改,怎么给PDF添加页码
  6. Python 实现应用程序窗口截屏 Gif
  7. 曲终人散,我亦是行人。
  8. Mac无法打开CORE Keygen
  9. Mol Cell Proteomics. |廖文丽| 阿尔兹海默症临床前期的脑脊液中突触蛋白的变化先于神经变性标志物...
  10. 项目升级与环境变化架构侧重点