kettle中调用java类

Jun 07, 2016 pm 04:04 PM
java 移行

kettle中调用java类 有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍

kettle中调用java类

有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍如何在kettle中调用java类。示例代码在这里下载

注:如果你使用kettle4.0及以上版本,也你也可以使用user defined java class 步骤实现。

Modified Java ScriptValue 步骤

关键要在kettle中使用ModifiedJava Script Value 步骤。从名称上看是仅仅执行javascript来实现该步骤,其实也可以执行java代码。为了理解,我们需要知道该步骤使用Rhino javaScript 引擎来实现,使其可以在jvm中实现javascript,也使其成为可能,让脚本去访问java类。为了说明其如何实现,让我们来看一个简单的转换示例,使用java去计算某个字段的md5码。如下图所示:

javascript步骤实现md5计算,包含如下代码:

// simulate java imports

varMessageDigest =java.security.MessageDigest;

varString =java.lang.String;

varStringBuffer =java.lang.StringBuffer;

varInteger =java.lang.Integer;

// get the md5 digest algorithm

varalgorithm =MessageDigest.getInstance("MD5");

// get the input as bytes

varbytes = newString(test_value).getBytes("UTF-8");

// calculate the digest

algorithm.reset();

algorithm.update(bytes);

varmd5Digest =algorithm.digest(); 

// turn the digest into a hex-stringrepresentation

varhexString = newStringBuffer(); 

for(vari =0; i

varhex= Integer.toHexString(0xFF & md5Digest[i]);

if(hex.length()== 1){

hexString.append('0');

}

hexString.append(hex);

}

// write output value

varmd5_hash =hexString.toString().toUpperCase();

让我们详细解释以上代码。

第一部分是就如java 导入包环节,事实上和java中import实现同样目的。声明变量指向java类,是为了避免我们后面引用每个java类使用完整java长类名带来不便。当使用自己定义的类是,要注意不小心覆盖了javascript类。javascript也有其自己的Date类实例,稍不在意,使用这种方式很容易覆盖。

接着是调用简单的java API生成md5值,需要指出的是,输入字段作为javascript对象,“test_value”字段是javascript String对象,有多种方法将其转换成java String对象,这里使用简单的构造函数实现;java String的getBytes()方法返回字节数组;

md5摘要值计算好后,接着通过一小段循环代码生成表现该值的字符串,最后作为一个新字段写到输出行。

使用外部jar包中的类

执行太多的脚步可能影响性能,所以总是把复杂的业务让编译好的java代码来做,通常是一些整洁的实现我们业务的java类库,有时我们可能自己去创建。kettle现有的功能当然不能满足我们的所有需求,调用几个外部类库可以避免写一个完整kettle插件。kettle启动时加载libext目录及子目录下所有jar文件,如果你需要访问自定义jar包的类,需要放在libext文件中。我们示例是关于MD5,从kettle3.2已经有了相应的jar包(apache commons codec项目)。codec项目有很好的方法计算输入字符串的MD5十六进制字符串,正好是我们需要的;我们仅仅使用DigestUtil类的方法即可。

//get a nice md5 hash

varmd5_hash = org.apache.commons.codec.digest.DigestUtils.md5Hex(test_value);

在我笔记本上运行新转换大概10500行/秒,第一版本的仅仅大概2900行/秒.

\

两者的处理速度差别很大,所以用封装好的功能似乎真的飞快,当然有可能apache项目采用完全不同的MD5算法实现。无论怎样,后者的实现既简单又快。

结论

Modified Java Script Value 步骤允许访问任何jvm中java类。如果你ETL项目有特定的需求,你已经使用java实现过的需求,这时你可以考虑使用这种方法试试。当使用脚步代码总是需要监视性能问题。如果你使用了大量的外部库,就需要有正确的版本依赖管理,否则在测试环境或部署环境中会产生问题。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles