您的位置:首页 > 编程语言 > Java开发

java 集成kettle

2017-07-22 11:02 218 查看
java集成kettle 示例:

方案:

启用定时任务,调用PDI生成的trans.ktr文件

maven仓库地址:http://maven-repository.com/artifact/pentaho-kettle
<repository>
    <id>pentaho-releases</id>
    <url>http://repository.pentaho.org/artifactory/repo/</url>
  </repository>
  
<kettle.version>6.1.0.1-196</kettle.version>

        <dependency> 

[align=left]            <groupId>pentaho-kettle</groupId> [/align]
[align=left]            <artifactId>kettle-core</artifactId> [/align]
[align=left]            <version>${kettle.version}</version>  [/align]
[align=left]        </dependency> [/align]
[align=left]         <dependency> [/align]
[align=left]             <groupId>com.verhas</groupId> [/align]
[align=left]             <artifactId>license3j</artifactId> [/align]
[align=left]             <version>1.0.7 </version> [/align]
[align=left]         </dependency> [/align]
[align=left]        <dependency> [/align]
[align=left]            <groupId>pentaho-kettle</groupId> [/align]
[align=left]            <artifactId>kettle-dbdialog</artifactId> [/align]
[align=left]            <version>${kettle.version}</version>  [/align]
[align=left]        </dependency> [/align]
[align=left]        <dependency> [/align]
[align=left]            <groupId>pentaho-kettle</groupId> [/align]
[align=left]            <artifactId>kettle-engine</artifactId> [/align]
[align=left]            <version>${kettle.version}</version>  [/align]
[align=left]        </dependency> [/align]
[align=left]        <dependency> [/align]
[align=left]            <groupId>pentaho</groupId> [/align]
[align=left]            <artifactId>metastore</artifactId> [/align]

            <version>${kettle.version}</version> 

        </dependency>
[align=left]        <dependency>[/align]
[align=left]                <groupId>com.google.guava</groupId>[/align]
[align=left]                <artifactId>guava</artifactId>[/align]
[align=left]                <version>19.0</version>[/align]

           </dependency>

     </dependencies>

DEMO:



211-whicoDB-in_student(table) 插入更新到  localhost-whicoDB-in_student(table) 的trans文件
[align=left]import org.pentaho.di.core.KettleEnvironment;[/align]
[align=left]import org.pentaho.di.core.util.EnvUtil;[/align]
[align=left]import org.pentaho.di.job.Job;[/align]
[align=left]import org.pentaho.di.job.JobMeta;[/align]
[align=left]import org.pentaho.di.trans.Trans;[/align]
[align=left]import org.pentaho.di.trans.TransMeta;[/align]
[align=left]/**[/align]
[align=left] * kettle version 6.1.0.1-196[/align]
[align=left] * @author jiangnan[/align]
[align=left] *[/align]
[align=left] */[/align]
public class KettleUtil
{
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      * 调用trans文件[/align]
[align=left]      * @param transFileName[/align]
[align=left]      * @throws Exception[/align]
[align=left]      */[/align]
[align=left]     public static void callNativeTrans(String transFileName) throws Exception{[/align]
[align=left]           callNativeTransWithParams(null, transFileName);[/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      * 调用trans文件 带参数的[/align]
[align=left]      * @param params[/align]
[align=left]      * @param transFileName[/align]
[align=left]      * @throws Exception[/align]
[align=left]      */[/align]
[align=left]     public static void callNativeTransWithParams(String[] params ,String transFileName) throws Exception{[/align]
[align=left]           // 初始化 [/align]
[align=left]           KettleEnvironment.init();[/align]
[align=left]         EnvUtil.environmentInit(); [/align]
[align=left]         TransMeta transMeta = new TransMeta(transFileName);[/align]
[align=left]         //转换[/align]
[align=left]         Trans trans = new Trans(transMeta); [/align]
[align=left]         //执行[/align]
[align=left]         trans.execute(params);[/align]
[align=left]         //等待结束[/align]
[align=left]         trans.waitUntilFinished();[/align]
[align=left]         //抛出异常 [/align]
        if(trans.getErrors()
> 0){ 
            throw new Exception("There
are errors during transformation exception!(传输过程中发生异常)"); 
[align=left]        } [/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      * 调用job文件[/align]
[align=left]      * @param jobName[/align]
[align=left]      * @throws Exception[/align]
[align=left]      */[/align]
[align=left]     public static void callNativeJob(String jobName) throws Exception{[/align]
[align=left]           // 初始化 [/align]
[align=left]           KettleEnvironment.init();[/align]
[align=left]        [/align]
[align=left]           JobMeta jobMeta = new JobMeta(jobName,null);[/align]
[align=left]           Job job = new Job(null, jobMeta);  [/align]
[align=left]           //向Job 脚本传递参数,脚本中获取参数值:${参数名}  [/align]
[align=left]           //job.setVariable(paranameparavalue);  [/align]
[align=left]            job.start();  [/align]
[align=left]            job.waitUntilFinished();  [/align]
            if (job.getErrors()
> 0) {
            throw new Exception("There
are errors during job exception!(执行job发生异常)"); 
[align=left]            }  [/align]

     }

[align=left]import org.apache.logging.log4j.LogManager;[/align]
[align=left]import org.apache.logging.log4j.Logger;[/align]

import com.stech.business.util.KettleUtil;

public class kettleTaskJob
{

     private static Logger LOGGER =
LogManager.getLogger(kettleTaskJob.class.getName());

      public void run() throws Exception
{
[align=left]          LOGGER.info("*****kettle定时任务运行开始******");[/align]

          String transFileName = "D:/work/kettle/trans.ktr";

          KettleUtil.callNativeTrans(transFileName);

          LOGGER.info("*****kettle定时任务运行结束******");

      }

[align=left]     [/align]
      public static void main(String[] args) throws Exception
{
[align=left]            kettleTaskJob job = new kettleTaskJob();[/align]
[align=left]            job.run();[/align]
[align=left]     }[/align]

}

2016-11-15 11:47:33,856 INFO  (VfsLog.java:136)
- Using "C:\Users\jiangnan\AppData\Local\Temp\vfs_cache" as temporary files store.
[align=left]2016/11/15 11:47:34 - trans - 为了转换解除补丁开始  [trans][/align]
[align=left]2016/11/15 11:47:37 - 表输入.0 - Finished reading query, closing connection.[/align]
[align=left]2016/11/15 11:47:37 - 表输入.0 - 完成处理 (I=47, O=0, R=0, W=47, U=0, E=0)[/align]

2016/11/15 11:47:38 - 插入 / 更新.0 - 完成处理 (I=47, O=47, R=47, W=47, U=0, E=0)

异常问题解决:

2016-11-15 13:30:41,438 INFO  (VfsLog.java:136)
- Using "C:\Users\jiangnan\AppData\Local\Temp\vfs_cache" as temporary files store.
[align=left]Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Suppliers.supplierFunction()Lcom/google/common/base/Function;[/align]
[align=left]     at org.pentaho.di.core.extension.ExtensionPointMap.get(ExtensionPointMap.java:120)[/align]
[align=left]     at org.pentaho.di.core.extension.ExtensionPointHandler.callExtensionPoint(ExtensionPointHandler.java:45)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:3368)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2732)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2684)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2661)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2641)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2606)[/align]
[align=left]     at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2569)[/align]
[align=left]     at com.stech.business.util.KettleUtil.callNativeTrans(KettleUtil.java:21)[/align]
[align=left]     at com.stech.business.quartz.kettleTaskJob.run(kettleTaskJob.java:13)[/align]

     at com.stech.business.quartz.kettleTaskJob.main(kettleTaskJob.java:19)

项目中依赖传递排除:





顶0
 
踩0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: