zoukankan      html  css  js  c++  java
  • kettle工具二次开发-代码启动JOB

    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了。

  • 相关阅读:
    Springboot html映射
    table 合并单元格
    Idea中Spring Boot 启动出错
    Modal模态框scrolltop保留上次位移的解决方案
    8、如何实现浏览器的前进、后退操作?
    html中table并排展示
    两个有序的链表的合并
    7、链表(下):如何轻松写出正确的链表代码?
    2018.10.12
    c语言关键字:const
  • 原文地址:https://www.cnblogs.com/pangblog/p/3268626.html
Copyright © 2011-2022 走看看