java調用kettle進行採集

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 - 任務執行完畢

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章