kettle工具二次开发-代码启动JOB

本文介绍了如何使用Kettle工具进行数据同步与处理,并详细阐述了如何通过设置全局变量简化连接参数配置。此外,还提供了Kettle二次开发的方法,包括通过代码启动JOB以提高程序稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kettle工具是一款优秀的数据同步、数据处理的BI工具,收到了很多人的青睐。kettle软件通过可视化的图标可以让我们很轻易的能完成数据同步、处理的开发工作。但是使用kettle可视化界面在跑JOB久之后,会报JAVA SWT的错误,故为了程序的稳定性,我们需要对其进行二次开发。

1.kettle可视化界面设计

由于业务不同,使用kettle工具做出的设计也不同,故在此只写一下如何设置连接参数为全局变量参数。

a)设置全局变量,如下图操作

编辑>设置环境变量


b)在弹出的环境变量框中,输入变量名称及变量值


c)创建一个新的连接,将连接参数设置为变量即可,如下图


注:若transform报“Streaming result set com.mysql.jdbc.RowDataDynamic@a42491 is still active.”错误,则将数据库连接里面的前面的对勾去了即可

2.kettle二次开发

由于kettle可视化界面不稳定,所以我们决定使用代码来启动JOB。

a)将使用kettle工具时生成的.kettle文件放在工程的WEB-INF下面,如下图

      

b)修改repositories.xml下面我们的kettle的xml文件存放的地址


c)在servlet中将当前工程执行路径传入同步类中,使其可以用该路径初始化kettle环境,代码如下:

	/**
	 * 设置Kettle的初始化配置信息路径
	 * @throws KettleException
	 */
	private void initKettleEnvironment() {
		// 获得执行类的当前路径
		String kettleHome = this.getServletContext().getRealPath(File.separator + "WEB-INF");
		System.out.println("kettleHome--->"+kettleHome);
		this.mKettelHome = kettleHome;
	}

private void startKettleTask()throws Exception{
		Timer kettleTask= new Timer();
		kettleTask.schedule(new KettleTask(this.mKettelHome), 0, "2000");
}

d)kettleTask类中开启kettleJOB,代码如下:

public class KettleTask extends TimerTask {
	private String mKettleHome;
	
	public KettleTask() {
		super();
	}

	public KettleTask(String kettleHome) throws KettleException {
		super();
		this.mKettleHome = kettleHome;

	}

	@Override
	public synchronized  void run() {
		Repository repository = null;
		Job job = null;
		try {

			// Kettle初始化需要修改相应的配置路径
			String user_dir = System.getProperty("user.dir");
			System.setProperty("user.dir", mKettleHome);
			System.setProperty("KETTLE_HOME", mKettleHome);
			
			//设置连接环境变量
			System.setProperty("DATABASE_IP_ADDRESS", "127.0.0.1");
			System.setProperty("DATABASE_DATABASE", "mysql");
			System.setProperty("DATABASE_IP_PORT","3306");
			System.setProperty("DATABASE_USERNAME", "root");
			System.setProperty("DATABASE_PASSWORD", "root");
			
			// 运行环境初始化(设置主目录、注册必须的插件等)
			KettleEnvironment.init();

			// Kettle初始化完毕,还原执行类的当前路径
			System.setProperty("user.dir", user_dir);

			RepositoriesMeta repositoriesMeta = new RepositoriesMeta();
			// 从文件读取登陆过的资源库信息
			repositoriesMeta.readData();
			// 选择登陆过的资源库
			RepositoryMeta repositoryMeta = repositoriesMeta
					.findRepository("kettleDemo");
			// 获得资源库实例
			repository = PluginRegistry.getInstance().loadClass(
					RepositoryPluginType.class, repositoryMeta.getId(),
					Repository.class);
			repository.init(repositoryMeta);
			// 连接资源库
			repository.connect("demo", "demo");
			System.out.println("Repository SyncData connect success.");
			JobMeta jobMeta = null;

			jobMeta = new JobMeta(
					WsUtility
							.getPropertyString("RootDirectory",
									"file:D://kettleDemo//")
							+ "kettleDataJob.kjb",
					repository);

			// 执行指定转换
			if (jobMeta != null) {
				job = new Job(repository, jobMeta);
				job.start();
				job.waitUntilFinished();
				if (job.getErrors() > 0) {
					System.out.println("decompress fail!");
				}
			}
			repository.disconnect();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

至此我们就完成了代码启动kettle的JOB了。

### Kettle 开源 ETL 工具下载及使用 Kettle 是一款功能强大的开源 ETL(Extract, Transform, Load)工具,广泛应用于数据抽取、转换和加载等场景[^1]。以下是关于 Kettle 的下载和使用的详细介绍。 #### 下载 Kettle Kettle 提供了多种版本的下载方式,用户可以根据需求选择合适的资源。以下是几个常见的下载地址: 1. **官方 GitHub 源码仓库** 可以从以下地址获取 Kettle 的源码: ```plaintext https://github.com/pentaho/pentaho-kettle ``` 该地址适合开发者或需要对 Kettle 进行二次开发的用户[^3]。 2. **SourceForge 软件下载页面** Kettle Spoon(图形化界面工具)的可执行文件可以从以下地址下载: ```plaintext https://sourceforge.net/projects/pentaho/files/Data%20Integration ``` 这里提供了不同操作系统下的安装包,包括 Windows、Linux 和 macOS 版本。 3. **第三方项目托管平台** 如果需要 Kettle 9.2 的具体版本,可以参考以下地址: ```plaintext https://gitcode.com/Open-source-documentation-tutorial/94ba3 ``` 此链接为 Kettle 9.2 的下载资源介绍[^2]。 #### 安装 Kettle 下载完成后,根据操作系统的不同进行安装: - **Windows 系统** 解压下载的压缩包后,运行 `Spoon.bat` 文件即可启动 Kettle 图形化界面。 - **Linux 或 macOS 系统** 解压后,进入解压目录并执行以下命令启动 Kettle: ```bash ./spoon.sh ``` #### 使用 Kettle Kettle 的核心功能分为两部分:Transformation(转换)和 Job(任务)。以下是基本使用步骤: 1. **创建 Transformation** Transformation 用于定义数据的提取、转换逻辑。通过拖拽组件(如表输入、字段选择、SQL 查询等)来构建数据流。 2. **创建 Job** Job 用于定义一系列的任务流程,例如按顺序执行多个 Transformation 或者控制条件分支。 3. **运行与调试** 在 Kettle 中可以直接运行 Transformation 或 Job,并通过日志查看执行情况。如果遇到问题,可以利用断点调试功能逐步排查。 #### 注意事项 在使用 Kettle 时需要注意以下几点[^4]: - **实时数据同步限制** Kettle 不支持真正的实时数据同步场景,尤其是在需要事务完整性和时间序保证的情况下。 - **性能瓶颈** 在大规模数据处理场景下,Kettle 的性能可能无法满足要求,可能会消耗大量计算资源。 - **异构数据源支持** 对于新兴的数据源(如 NoSQL 数据库、MPP 数据库或大数据平台),Kettle 的支持能力有限。 - **运维管理功能** 免费版 Kettle 缺乏必要的监控和异常处理功能,可能影响系统的稳定性和用户体验。 ```python # 示例代码:通过 Python 调用 Kettle 的 Transformation import subprocess # 定义 Transformation 文件路径 transformation_file = "path/to/your/transformation.ktr" # 调用 Kettle 命令行工具 Pan.sh subprocess.call(["pan.sh", "-file=" + transformation_file]) ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风水月

从心底相信自己是成功的第一步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值