2023年JAVA集成调用Kettle示例

这篇具有很好参考价值的文章主要介绍了2023年JAVA集成调用Kettle示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近要弄一个java调用kettle的代码,查找网上的例子有很多的jar包下不下来,弄下来了各种报错,花了一点时间趟平了坑。临近新年,最后祝各位新年快乐!

成功示例

2023年JAVA集成调用Kettle示例

确认版本

依赖的jar包以pom的形式引入,有诸多版本,如果与kettle的版本不匹配则会调用失败。因为在java代码里会初始化插件来执行任务,查看插件版本9.0.0.0-423.

2023年JAVA集成调用Kettle示例

引入依赖

仓库镜像地址:
<repository>
    <id>pentaho-public</id>
    <name>Pentaho Public</name>
    <url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>
    <releases>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
    </releases>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>interval:15</updatePolicy>
    </snapshots>
</repository>
<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-core</artifactId>
    <version>9.0.0.0-423</version>
</dependency>
<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-dbdialog</artifactId>
    <version>9.0.0.0-423</version>
</dependency>

<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-engine</artifactId>
    <version>9.0.0.0-423</version>
</dependency>

<dependency>
    <groupId>pentaho</groupId>
    <artifactId>metastore</artifactId>
    <version>9.0.0.0-423</version>
</dependency>

以前的pentao镜像地址已经打不开了,https://nexus.pentaho.org/content/groups/omni/ ,估计以后也不会恢复了,所以使用新地址https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/

java源代码

可以执行转换和任务,特别注意到pluginsPath需要修改到pentao的插件目录 x:\xx\data-integration\plugins文章来源地址https://www.toymoban.com/news/detail-434944.html

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.plugins.PluginFolder;
import org.pentaho.di.core.plugins.PluginFolderInterface;
import org.pentaho.di.core.plugins.StepPluginType;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

import java.io.File;
import java.util.List;

/**
 * kettle服务
 * @author 
 */
public class KettleTool {



    private static String username = "xxx";
    private static String password = "xxx";
    private static String pluginsPath = "D:\\workspace\\data-integration\\data-integration\\plugins";

    /**
     * 加载kettle插件
     */
    static {
        File dir = new File(pluginsPath);
        File[] files = dir.listFiles();
        List<PluginFolderInterface> pluginFolders = StepPluginType.getInstance().getPluginFolders();
        for (File file: files ) {
            pluginFolders.add(new PluginFolder(pluginsPath + "\\" + file.getName() , false , true));
        }
    }

    /**
     * 数据库连接元对象
     * (kettle数据库连接名称(KETTLE工具右上角显示),资源库类型,连接方式,IP,数据库名,端口,用户名,密码) //cgmRepositoryConn
     */
    private static DatabaseMeta getDatabaseMeta(){
        DatabaseMeta databaseMeta = new DatabaseMeta("123", "MYSQL", "Native(JDBC)", "127.0.0.1",
                "kettle_repo", "3306", "root", "123456");
        // 关闭mysql推荐SSL连接提示
        databaseMeta.addExtraOption("MYSQL" , "useSSL" , "false");
        return databaseMeta;
    }

    public static void main(String[] args) throws Exception {
        executeTrans("/ETL_TEST" , "ETL_TABLE_SINGLE_TEST");
    }

    /**
     * 执行转换
     * @param folder
     * @param transId
     * @throws KettleException
     */
    public static void executeTrans(String folder, String transId) throws KettleException{
        KettleDatabaseRepository repository = RepositoryCon();
        // 获取目录
        RepositoryDirectoryInterface directory = repository.loadRepositoryDirectoryTree().findDirectory(folder);
        // 根据作业名称获取作业id,加载作业
        ObjectId id = repository.getTransformationID(transId , directory);
        TransMeta transMeta = repository.loadTransformation(id, null);
        Trans trans = new Trans(transMeta);
        String[] arguments = new String[2];
        trans.execute(arguments);
        trans.waitUntilFinished();
    }

    /**
     * 执行任务
     *
     * @param folder
     * @param jobId
     * @throws KettleException
     */
    public static void executeTask(String folder, String jobId) throws KettleException {
        KettleDatabaseRepository repository = RepositoryCon();
        // 获取目录
        RepositoryDirectoryInterface directory = repository.loadRepositoryDirectoryTree().findDirectory(folder);
        // 根据作业名称获取作业id
        ObjectId id = repository.getJobId(jobId, directory);
        // 加载作业
        JobMeta jobMeta = repository.loadJob(id, null);
        Job job = new Job(repository, jobMeta);
        // 执行作业
        job.run();
        // 等待作业执行完毕
        job.waitUntilFinished();
    }

    /**
     * * 连接到资源库
     */
    private static KettleDatabaseRepository RepositoryCon() throws KettleException {

        // 初始化环境
        if (!KettleEnvironment.isInitialized()) {
            try {
                KettleEnvironment.init();
            } catch (KettleException e) {
                e.printStackTrace();
            }
        }
        // 数据库形式的资源库元对象
        KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta();
        kettleDatabaseRepositoryMeta.setConnection(getDatabaseMeta());
        // 数据库形式的资源库对象
        KettleDatabaseRepository kettleDatabaseRepository = new KettleDatabaseRepository();
        // 用资源库元对象初始化资源库对象
        kettleDatabaseRepository.init(kettleDatabaseRepositoryMeta);
        // 连接到资源库 , 默认的连接资源库的用户名和密码
        kettleDatabaseRepository.connect(username, password);
        if (kettleDatabaseRepository.isConnected()) {
            System.out.println("连接成功");
            return kettleDatabaseRepository;
        } else {
            System.out.println("连接失败");
            return null;
        }
    }


}

到了这里,关于2023年JAVA集成调用Kettle示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Flask Web创建一个调用ChatGPT API的网页--简单示例(linux环境下)

    前提:你应该要有一个能正常使用chatGPT的openAI账号;即你已经成功注册了chatGPT,并能正常使用。 下面是一个使用Flask Web框架创建调用ChatGPT API的网页的示例代码和工程结构: 具体的工程,你可以选择自己创建,也可以直接下载我创建好的工程,链接如下: https://download.csd

    2024年02月13日
    浏览(39)
  • 使用Flask Web创建一个调用ChatGPT API的网页--简单示例(Windows环境下)

    前提:你应该要有一个能正常使用chatGPT的openAI账号;即你已经成功注册了chatGPT,并能正常使用。 要使用Flask Web创建一个调用ChatGPT API的网页,你需要以下几个主要组成部分: ChatGPT API:一个可以处理用户输入并生成回复的ChatGPT模型的API。你可以使用OpenAI提供的GPT-3.5 Playgro

    2024年02月12日
    浏览(45)
  • kettle调用接口数据

    流程讲解: 基础流程是1.首先根据调用的接口所需要的参数或其他配置信息进行信息生成(有些简单的接口无需这一步来生成信息,可以直接在接口调用组件中进行调用)。2.将配置信息传入,进行接口调用。(简单的接口可以直接在这步开始)。3.将调用接口返回的json数据

    2023年04月16日
    浏览(36)
  • 【数据预处理】基于Kettle的字符串数据清洗、Kettle的字段清洗、Kettle的使用参照表集成数据

    🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏

    2024年02月03日
    浏览(53)
  • Spring Boot学习随笔- 集成MyBatis-Plus,第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化开发,提高效率。它扩展了MyBatis的功能,提供了许多实用的特性,包括强大的CRUD操作、条件构造器、分页插件、代码生成器等。MyBa

    2024年02月04日
    浏览(54)
  • 用Kettle调用Restful API 接口

    前言 作为一名架构师,在带领团队进行项目开发时,笔者认为一定要遵循一个原则:能借助第三方工具解决的开发任务,尽量用工具解决,以此来减少开发量,这样不但能够提高团队的工作效率,便于项目及时交付,也能在开发人员数量一定的条件下,更容易把余下的开发工

    2024年02月01日
    浏览(44)
  • Spring Boot学习随笔- 集成MyBatis-Plus(一),第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化开发,提高效率。它扩展了MyBatis的功能,提供了许多实用的特性,包括强大的CRUD操作、条件构造器、分页插件、代码生成器等。MyBa

    2024年02月04日
    浏览(45)
  • kettle之http调用简单介绍(carte)

    Carte:轻量级的HTTP服务器(基于Jetty),后台运行,监听HTTP请求来运行一个作业。可以用来 http 请求允许,停止 ,监控 job和trans的运行。其也用于分布式和协调跨机器执行作业,也就是Kettle的集群。运行Carte的服务器在kettle术语里称为slave server。 1.Kettle当前目录打开cmd窗口,

    2024年02月03日
    浏览(32)
  • kettle的简单示例:实现数据定时推送和监测,并发送异常报告邮件

      生产环境的系统因程序BUG,产生了异常数据若没有及时处理,随着时间的日积月累最后可能会出现难以挽回的经济损失。   鉴于此,我们需要有一套自动核查机制。定时检查数据库的核心表数据。当出现不符合要求的异常数据时,能尽早提醒管理员及时处理。 以下使用大

    2024年02月12日
    浏览(47)
  • Kettle Local引擎使用记录(一)(基于Kettle web版数据集成开源工具data-integration源码)

    在前面对 data-integration 做了一些简单了解,从部署到应用,今天尝试把后端运行作业代码拎出来,去真正运行一下,只有实操之后才会有更深刻的认识,有些看着简单的功能,实操过程中会遇到很多问题,这个时候你的想法也会发生改变,所以很多时候为什么开发人员痛恨做

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包