<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>8.3.0.0-371</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>8.3.0.0-371</version>
</dependency>
<dependency>
<groupId>pentaho-metastore</groupId>
<artifactId>metastore</artifactId>
<version>8.3.0.0-371</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.46</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
-
如果下载不了,就把下列 .jar 文件上传到 maven 仓库里,下载资源地址:(https://download.csdn.net/download/qq_41657176/13211587)
-
如果需要用到 ftp 和 JavaScript 的话,就需要引入以下两个包,下载资源地址:(https://download.csdn.net/download/qq_41657176/13590955)
-
配置文件:application-config.yml
kettle-config:
url: D:\ETL_file
@Component
@ConfigurationProperties(
prefix = "kettle-config"
)
public class KettleConfig {
private String url;
public KettleConfig() {
}
public String getUrl() {
return this.url;
}
public void setUrl(final String url) {
this.url = url;
}
public String toString() {
return "KettleConfig(url=" + this.getUrl() + ")";
}
}
private static final Logger log = LogManager.getLogger(KettleController.class);
@Autowired
private KettleConfig kettleConfig;
@RequestMapping({"localTrans"})
public String localTrans(@RequestParam(value = "params",defaultValue = "") String... params) {
int length = params.length;
if (length % 2 == 0) {
return "执行失败!";
} else {
try {
String fileName = this.kettleConfig.getUrl() + File.separator + params[0];
log.info("文件名:" + params[0]);
File file = FileUtil.file(fileName);
String path = file.getPath();
KettleEnvironment.init();
TransMeta transMeta = new TransMeta(path);
Trans trans = new Trans(transMeta);
if (length > 1) {
log.info("--------------传入参数-----------------");
log.info(":");
for(int i = 0; i < params.length - 1; i += 2) {
trans.setParameterValue(params[i + 1], params[i + 2]);
log.info("传入的key:" + params[i + 1] + "传入的value:" + params[i + 2]);
}
log.info("-------------------------------------");
}
trans.prepareExecution((String[])null);
trans.startThreads();
trans.waitUntilFinished();
return "执行成功!";
} catch (Exception var9) {
var9.printStackTrace();
return "执行失败!";
}
}
}
@RequestMapping({"localJobs"})
public String localJobs(@RequestParam(value = "params", defaultValue = "") String... params) {
int length = params.length;
if (length % 2 == 0) {
return "执行失败!";
} else {
try {
String fileName = this.kettleConfig.getUrl() + File.separator + params[0];
log.info("文件地址:" + fileName);
KettleEnvironment.init();
JobMeta jobMeta = new JobMeta(fileName, null);
Job job = new Job(null, jobMeta);
Map<String, Object> paramsMap = new HashMap<>();
if (length > 1) {
log.info("--------------传入参数-----------------");
for(int i = 0; i < params.length - 1; i += 2) {
paramsMap.put(params[i + 1], params[i + 2]);
log.info("传入的key:" + params[i + 1] + "传入的value:" + params[i + 2]);
}
log.info("-------------------------------------");
}
setParams(job, paramsMap, jobMeta);
job.start();
job.waitUntilFinished();
return "执行成功!";
} catch (Exception var9) {
var9.printStackTrace();
return "执行失败!";
}
}
}
private void setParams(Job job, Map<String, Object> params, JobMeta jobMeta) {
if (Assert.isEmpty(params)) {
return;
}
String[] jobMetaParams = jobMeta.listParameters();
List<String> keys = new ArrayList<>();
for (String s : jobMetaParams) {
keys.add(s);
}
try {
for (String key : params.keySet()) {
if (!keys.contains(key)) {
jobMeta.addParameterDefinition(key, null, "");
job.addParameterDefinition(key, null, "");
}
jobMeta.setParameterValue(key, params.get(key).toString());
job.setParameterValue(key, params.get(key).toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
-
记住如果要修改数据库东西的时候要连接数据库哦!sprinboot 连接数据库可以看这篇文章:(https://blog.csdn.net/qq_41657176/article/details/100113282)