java如何调用kettle设置变量和参数

 更新时间:2025年01月02日 08:53:49   作者:千里草竹  
文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置的变量,作者分享了个人经验,并鼓励大家参考和使用脚本之家

java调用kettle设置变量和参数

java调用kettle,变量和参数的设置方式

java代码中变量会覆盖kettle里面设置的变量

需要注意:

变量和参数 他俩是不一样的

public class JobMail {
	public static void main(String[] args) throws KettleException {

		KettleDatabaseRepository repository = KettleUtils.kettleDbRepository;
		String job_path = "/201811_JOB";
		String job_name = "A_邮件job_para";
		execJob(repository, job_path, job_name);
	}

	/**
	 * 执行 JOB
	 * 
	 * @param repository
	 *            kettle数据库资源库
	 * @param job_path
	 *            JOB 目录
	 * @param job_name
	 *            JOB 名称
	 * @throws KettleException
	 */
	private static void execJob(KettleDatabaseRepository repository, String job_path, String job_name) throws KettleException {
		RepositoryDirectoryInterface dir = repository.findDirectory(job_path);
		JobMeta jobMeta = repository.loadJob(repository.getJobId(job_name, dir), null);
		Job job = new Job(repository, jobMeta);
		// 设置参数
		jobMeta.setParameterValue("sql_file", "d://12");
		jobMeta.setParameterValue("sql_file_para", "java中参数");
		job.setLogLevel(LogLevel.DEBUG);
		// 设置变量 java代码中变量会覆盖kettle里面设置的变量
		job.setVariable("sql_file", "d://13");
		// 启动执行指定的job
		job.start();
		job.waitUntilFinished();// 等待job执行完;
		job.setFinished(true);
		System.out.println(job.getResult());

	}
}
public class KettleUtils {
	private static Logger logger = Logger.getLogger(KettleUtils.class);

	private KettleUtils() throws Exception {
		throw new Exception("工具类不允许创建");
	}

	/**
	 * kettle 资源库
	 */
	public static KettleDatabaseRepository kettleDbRepository;

	static {
		if (kettleDbRepository == null) {
			kettleDbRepository = getKettleDatabaseRepository();
			logger.info("实例化kettle资源库");
		}
	}

	/**
	 * 设置kettle资源库连接信息
	 * 
	 * @return
	 */
	public static DatabaseMeta setDatabaseMeta() {
		return new DatabaseMeta(PropUtils.getConfigValByKey("name"), PropUtils.getConfigValByKey("type"), PropUtils.getConfigValByKey("access"), PropUtils.getConfigValByKey("host"), PropUtils.getConfigValByKey("db"), PropUtils.getConfigValByKey("port"), PropUtils.getConfigValByKey("user"), PropUtils.getConfigValByKey("pass"));
	}

	/**
	 * kettle 资源库 获取
	 * 
	 * @return
	 */
	private static KettleDatabaseRepository getKettleDatabaseRepository() {
		try {
			KettleEnvironment.init();
			// 创建DB资源库
			KettleDatabaseRepository repository = new KettleDatabaseRepository();
			DatabaseMeta databaseMeta = KettleUtils.setDatabaseMeta();
			// 选择资源库 此处参我与本地不一致还是正确执行
			KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta("Kettle", "Kettle", "Transformation description", databaseMeta);
			repository.init(kettleDatabaseRepositoryMeta);
			// 连接资源库 DatabaseMeta中已经设置了,不明白此处为何还要再次设置
			repository.connect("admin", "admin");
			return repository;
		} catch (KettleException e) {
			e.printStackTrace();
			logger.error("kettle资源库连接失败");
		}
		return null;
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 为什么禁止在SpringBoot项目中使用@Autowired注解

    为什么禁止在SpringBoot项目中使用@Autowired注解

    写代码的时候突然发现 idea 在属性注入的 @Autowired 注解上给出警告提示,spring framework 4.0 以后开始出现的,spring 4.0 开始就不推荐使用属性注入,改为推荐构造器注入和 setter 注入,推荐的方法是使用基于构造函数和基于setter的依赖注入
    2024-08-08
  • Java线程优先级示例代码

    Java线程优先级示例代码

    使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载
    2013-09-09
  • springboot项目中jacoco服务端部署使用

    springboot项目中jacoco服务端部署使用

    这篇文章主要为大家介绍了springboot项目中jacoco服务端部署使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • java运行windows的cmd命令简单代码

    java运行windows的cmd命令简单代码

    这篇文章主要介绍了java运行windows的cmd命令简单代码,有需要的朋友可以参考一下
    2013-12-12
  • Java 内置接口 Serializable示例详解

    Java 内置接口 Serializable示例详解

    这篇文章主要为大家介绍了Java 内置接口 Serializable示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • java如何根据IP获取当前区域天气信息详解

    java如何根据IP获取当前区域天气信息详解

    根据IP自动获取当地的天气预报信息这个功能大家应该都遇到过,天气预报信息用途非常广泛,篇文章主要给大家介绍了关于java如何根据IP获取当前区域天气信息的相关资料,需要的朋友可以参考下
    2021-08-08
  • 使用Java构建一个简洁清晰的日期API

    使用Java构建一个简洁清晰的日期API

    这篇文章主要为大家详细介绍了如何使用Java构建一个简洁清晰的日期API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-10-10
  • Spring MVC中的Controller进行单元测试的实现

    Spring MVC中的Controller进行单元测试的实现

    本文主要介绍了如何对Spring MVC中的Controller进行单元测试的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • java网络之基于UDP的聊天程序示例解析

    java网络之基于UDP的聊天程序示例解析

    这篇文章主要介绍了java网络之基于UDP的聊天程序示例解析,文中通过步骤及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 详解rabbitmq使用springboot实现fanout模式

    详解rabbitmq使用springboot实现fanout模式

    这篇文章主要介绍了rabbitmq使用springboot实现fanout模式,Fanout特点是发布与订阅模式,是一种广播机制,它是没有路由key的模式,需要的朋友可以参考下
    2023-07-07

最新评论