问题
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协议 。转载请注明出处!