问题

springboot kettle job和转换打包到jar中,kettle无法读取到转换脚本。可以通过自定义repo获取

自定义repo

package com.cares.dsp.collection.dataCollection.sims;

import org.pentaho.di.core.ProgressMonitorListener;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.RepositoryDirectory;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.RepositoryElementInterface;
import org.pentaho.di.repository.StringObjectId;
import org.pentaho.di.repository.filerep.KettleFileRepository;
import org.pentaho.di.repository.filerep.KettleFileRepositoryMeta;
import org.pentaho.di.shared.SharedObjects;
import org.pentaho.di.trans.TransMeta;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;

public class CustomFileRepo extends KettleFileRepository {

    public CustomFileRepo() {
        KettleFileRepositoryMeta repositoryMeta = new KettleFileRepositoryMeta();
        repositoryMeta.setBaseDirectory("/");
        this.setRepositoryMeta(repositoryMeta);
    }

    @Override
    public TransMeta loadTransformation(String transname, RepositoryDirectoryInterface repdir, ProgressMonitorListener monitor, boolean setInternalVariables, String versionName) throws KettleException {
        if (!transname.endsWith(".ktr")) {
            transname+=".ktr";
        }
        ClassPathResource classPathResource = new ClassPathResource("kettle_jobs/smislyg/"+transname);
        TransMeta transMeta = null;
        try {
            transMeta = new TransMeta(classPathResource.getInputStream(),this,setInternalVariables,null,null);
        } catch (IOException e) {
            e.printStackTrace();
        }
        transMeta.setRepository(this);
        transMeta.setMetaStore(this.getMetaStore());
        transMeta.setName(transname);
        transMeta.setObjectId(new StringObjectId(this.calcObjectId(repdir, transname, ".ktr")));
        transMeta.clearChanged();
        return transMeta;
    }

    @Override
    public String calcObjectId(RepositoryDirectoryInterface dir) {
        return dir.getName();
    }

    @Override
    public String calcObjectId(RepositoryDirectoryInterface directory, String name, String extension) {

        if (!name.endsWith(".ktr")) {
            name+=extension;
        }
        return name;
    }

    @Override
    public String calcObjectId(RepositoryElementInterface element) {
        return element.getName();
    }

    @Override
    public RepositoryDirectoryInterface findDirectory(String directory) throws KettleException {
        return new RepositoryDirectory(null,directory);
    }

    @Override
    public SharedObjects readJobMetaSharedObjects(JobMeta jobMeta) throws KettleException {
        return null;
    }
}

job 调用 自定义repo


            ClassPathResource classPathResource = new ClassPathResource("etl.kjb");
            CustomFileRepo repo = new CustomFileRepo();
            JobMeta jobMeta = new JobMeta(classPathResource.getInputStream(), repo, null);
            Job job = new Job(repo, jobMeta);
            job.start();
            job.waitUntilFinished();



ETL      kettle 读取jar中的transformation

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!