1,引入jar包,這跟kettle相關的包好像有點多
<dependency>
<groupId>kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>metastore</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>js</artifactId>
<version>1.7R3</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>jersey-apache-client</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>kettle-json-plugin</artifactId>
<version>7.1.0.0-12</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>javax.ws.rs</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>scannotation</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<dependency>
<groupId>kettle</groupId>
<artifactId>commons-vfs</artifactId>
<version>2-2.1-20150824</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>17.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
2,引入驅動jar包,根據需要選擇,這裏給出sqlserver,MySQL和oracle
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
3,代碼中調用api
package com.lanwon.kettle.service;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.plugins.PluginFolder;
import org.pentaho.di.core.plugins.StepPluginType;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class MainService {
@Value("${plugins_path}")
private String pluginsPath;//從配置文件讀取kettle插件的目錄
@Value("${kjb_path}")
private String kjbPath;//從配置文件讀取kjb任務的目錄
public Object go(String flowNo){
try {
System.out.println("插件路徑:" + pluginsPath);
StepPluginType.getInstance().getPluginFolders().add(new PluginFolder(pluginsPath, false, true));
//kettle環境初始化
KettleEnvironment.init();
//獲取kettle服務腳本路徑
System.out.println("腳本路徑:" + kjbPath);
//實例化腳本
JobMeta jobMeta = new JobMeta(kjbPath, null);
//創建一個job
Job job = new Job(null, jobMeta);
job.setVariable("flowNo", flowNo);
//job開始
job.start();
job.waitUntilFinished();
if (job.getErrors() > 0) {
throw new Exception("There are errors during job exception!(執行job發生異常)");
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
}
flowNo爲業務參數,kettle的文件內容對應如下
記得勾選替換SQL語句裏的變量
4,配置文件內容
plugins_path=D:/kettle/data-integration/plugins
kjb_path=D:/kettle/data-integration/dancai.kjb
5,執行結果如下
插件路徑:E:/kettle數據採集/data-integration/plugins
腳本路徑:C:/Users/Thinkpad/Desktop/test/java_test.kjb
2019/08/30 16:08:34 - java_test - 開始執行任務
2019/08/30 16:08:34 - java_test - 開始項[轉換]
2019/08/30 16:08:34 - 轉換 - Loading transformation from XML file [C:\Users\Thinkpad\Desktop\test\java_test.ktr]
2019/08/30 16:08:34 - 轉換 - Using run configuration [Pentaho local]
2019/08/30 16:08:34 - 轉換 - Using legacy execution engine
2019/08/30 16:08:34 - java_test - 爲了轉換解除補丁開始 [java_test]
2019/08/30 16:08:35 - 表輸入.0 - Finished reading query, closing connection.
2019/08/30 16:08:35 - java_test - 完成作業項[轉換] (結果=[true])
2019/08/30 16:08:35 - java_test - 任務執行完畢