You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot执行含子转换的Pentaho Job时路径参数报错咨询

问题

已成功通过SpringBoot执行Pentaho任务(Job)和转换(Transformation),但执行包含通过${Internal.Job.Filename.Directory}参数关联子转换的Pentaho Job时出现异常。该配置在Pentaho PDI中可正常运行,但在SpringBoot代码中执行时,出现转换路径无效的报错:

2022/10/10 10:51:04 - data-fetch - Starting entry [Check S3 DB Connections]
2022-10-10T10:51:04.632+0530
      (org.pentaho.di.job.Job) [http-nio-8085-exec-10] INFO   - [src/main/resources/pentaho/data-fetch.kjb]  Starting entry [Check S3 DB Connections]
2022/10/10 10:51:14 - data-fetch - Starting entry [S3-Transformation]
2022-10-10T10:51:14.828+0530
      (org.pentaho.di.job.Job) [http-nio-8085-exec-10] INFO   - [src/main/resources/pentaho/data-fetch.kjb]  Starting entry [S3-Transformation]
2022/10/10 10:51:14 - S3-Transformation - ERROR (version 9.0.0.1-497, build 9.0.0.1-497 from 2020-03-19 08.25.00 by buildguy) : Unable to run job data-fetch. The S3-Transformation has an error. The transformation path ${Internal.Job.Filename.Directory}/S3-fetch.ktr is invalid, and will not run successfully.
2022/10/10 10:51:14 - S3-Transformation - ERROR (version 9.0.0.1-497, build 9.0.0.1-497 from 2020-03-19 08.25.00 by buildguy) : org.pentaho.di.core.exception.KettleXMLException: 
2022/10/10 10:51:14 - S3-Transformation - The transformation path ${Internal.Job.Filename.Directory}/S3-fetch.ktr is invalid, and will not run successfully.

疑问:是否需要使用其他参数来解决该问题?

解决方案
  • 核心原因:SpringBoot执行场景下,Pentaho无法正确解析${Internal.Job.Filename.Directory}——这个内部变量依赖Job文件的物理文件系统路径,但SpringBoot打包后资源文件位于Jar包内部,不存在真实的磁盘目录;或者Job加载方式未触发该参数的自动初始化。

  • 可行解决办法:

    1. 自定义参数替代内部变量
      在SpringBoot代码中手动定义一个自定义参数(比如JOB_DIR),指定子转换的实际路径(可以是Jar内资源路径或外部目录路径):

      JobMeta jobMeta = new JobMeta(jobPath, null);
      // 替换为你的Job文件所在的实际路径
      jobMeta.setParameterValue("JOB_DIR", "/opt/pentaho-jobs/"); 
      Job job = new Job(null, jobMeta);
      job.start();
      

      然后在Pentaho Job中,将子转换的路径修改为${JOB_DIR}/S3-fetch.ktr。

    2. 将Pentaho资源移至外部目录
      把kjb和ktr文件从SpringBoot的resources目录迁移到服务器的外部目录(比如/opt/pentaho-resources/),这样${Internal.Job.Filename.Directory}就能正确指向该外部目录,无需修改参数配置。

    3. 手动初始化内部参数
      在加载Job时直接给Internal.Job.Filename.Directory赋值:

      JobMeta jobMeta = new JobMeta(jobPath, null);
      // 设置为Job文件所在的实际目录路径
      jobMeta.setParameterValue("Internal.Job.Filename.Directory", getJobDirectory());
      Job job = new Job(null, jobMeta);
      job.start();
      

内容的提问来源于stack exchange,提问作者Leofierus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:45:36