EtlScheduler.java
package com.simonftxy.core;
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EtlScheduler {
private static Logger _log = LoggerFactory.getLogger(EtlScheduler.class);
public void run() throws SchedulerException {
_log.info("------- Initializing ----------------------");
// First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
_log.info("------- Initialization Complete -----------");
// computer a time that is on the next round minute
Date runTime = evenMinuteDate(new Date());
_log.info("------- Scheduling Job -------------------");
// define the job and tie it to our HelloJob class
JobDetail job = newJob(EtlJob.class).withIdentity("job1", "group1")
.build();
// Trigger the job to run on the next round minute
Trigger trigger = newTrigger().withIdentity("trigger1", "group1")
.startAt(runTime).build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
_log.info(job.getKey() + " will run at: " + runTime);
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
sched.start();
_log.info("------- Started Scheduler -----------------");
// wait long enough so that the scheduler as an opportunity to
// run the job!
_log.info("------- Waiting 65 seconds... -------------");
try {
// wait 65 seconds to show job
Thread.sleep(65L * 1000L);
// executing...
} catch (Exception e) {
e.printStackTrace();
}
// shut down the scheduler
_log.info("------- Shutting Down ---------------------");
sched.shutdown(true);
_log.info("------- Shutdown Complete -----------------");
}
public static void main(String[] args) throws SchedulerException {
EtlScheduler scheduler = new EtlScheduler();
scheduler.run();
}
}
EtlJob.java
package com.simonftxy.core;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EtlJob implements Job {
private static Logger _log = LoggerFactory.getLogger(EtlJob.class);
public EtlJob() {
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
String cmd = "cmd /c kitchen.bat /file:G:\\TDDOWNLOAD\\Dev\\Data_Integration\\ae_demo\\Sample.kjb /level:Detailed >> H:\\1.log";
File execPath = new File("G:/TDDOWNLOAD/Dev/Data_Integration/pdi-4.3.0");
_log.info("Etl Job executed at " + new Date());
try {
Process pro = Runtime.getRuntime().exec(cmd, null, execPath);
BufferedReader input = new BufferedReader(new InputStreamReader(pro.getInputStream(), "GB2312"));
String msg = null;
while ((msg = input.readLine()) != null) {
System.out.println(msg);
}
int exitVal = pro.waitFor();
_log.info("Exited with error code: " + exitVal);
_log.info("Etl Job finished at " + new Date());
} catch (IOException e) {
_log.error("Etl Job IOException. " + e.getMessage());
} catch (InterruptedException e) {
_log.error("Etl Job InterruptedException. " + e.getMessage());
}
}
}