kettle调度job

                       
                   

需求:

 

最近公司做一个任务调度项目,其中一个小任务需要调度kettle,现有一需求,就是kettle产生的日志,不管正确与否,都要写入日志文件中

 

问题分析:

 

目前java调入job 代码如下(简化)

 

   
   
  1. //设定kettle文件地址
  2. JobMeta jobMeta = new JobMeta(kjbPath, null);
  3. Job job = new Job( null, jobMeta);
  4. // 配置作业参数
  5. for (String key : parmap.keySet()) {
  6.    job.setVariable(key, parmap.get(key));
  7. }
  8. // 启动作业
  9. job.start();
  10. // 等待作业执行完毕
  11. job.waitUntilFinished();
 

kettle日志是输出到console 控制台的,网上有日志入数据库表的办法,但不能解决本次需求;日志输出到文件解决思路有两个,第一个思路:截获控制台System.out标准输出流,重定向到文件; 第二个思路:寻找kettle API,监听kettle日志然后进行处理。

 


解决步骤

 

第一步:截获System.out 输出到文件 代码如下(简化)

 

   
   
  1. //设定kettle文件地址
  2. JobMeta jobMeta = new JobMeta(kjbPath, null);
  3. Job job = new Job( null, jobMeta);
  4. // 配置作业参数
  5. for (String key : parmap.keySet()) {
  6.    job.setVariable(key, parmap.get(key));
  7. }
  8. //将标准输出重定向到文件
  9. PrintStream out = System.out;
  10. String logFileName = 'd:\\logfile.log' //此处根据业务动态获取日志文件
  11. System.setOut( new PrintStream(logFileName));
  12. // 启动作业
  13. job.start();
  14. // 等待作业执行完毕
  15. job.waitUntilFinished();
  16. //恢复标准输出
  17. System.setOut(out);
 

第一步完成后发现实际效果与预期不符,日志文件里记录了部分日志,不是全部日志,查看kettle源码后发现,kettle 执行任务时,里边的转换是多线程调用的,所以,在main中改变标准输出后,其他线程还是照样输出到控制台,只有main线程乖乖输出到文件。所以,采取第二步行动。

 

第二步:监听kettle日志,代码如下

 

   
   
  1. //设定kettle文件地址
  2. JobMeta jobMeta = new JobMeta(kjbPath, null);
  3. Job job = new Job( null, jobMeta);
  4. // 配置作业参数
  5. for ( String key : parmap. keySet()) {
  6.    job. setVariable(key, parmap. get(key));
  7. }
  8. //监听kettle日志
  9. KettleLogStore. getAppender(). addLoggingEventListener( new KettleLoggingEventListener() {
  10.       @Override
  11.       public void eventAdded( KettleLoggingEvent logs) {
  12.           //logs为kettle运行时输出的日志。
  13.           System. out. println(logs. getMessage());
  14.        }
  15. });
  16. // 启动作业
  17. job. start();
  18. // 等待作业执行完毕
  19. job. waitUntilFinished();
 

 

 

至此,圆满完成老板需求。
 

               
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值