package cn.net.communion.dbdatasync;
|
|
import java.lang.reflect.Field;
|
import java.sql.Connection;
|
import java.sql.DriverManager;
|
import java.sql.PreparedStatement;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.Enumeration;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import org.apache.log4j.Level;
|
import org.apache.log4j.LogManager;
|
import org.apache.log4j.Logger;
|
import org.dom4j.Document;
|
import org.dom4j.DocumentException;
|
import org.dom4j.Element;
|
import org.dom4j.io.SAXReader;
|
import org.quartz.CronTrigger;
|
import org.quartz.JobDetail;
|
import org.quartz.Scheduler;
|
import org.quartz.SchedulerException;
|
import org.quartz.SchedulerFactory;
|
import org.quartz.impl.StdSchedulerFactory;
|
|
import static org.quartz.CronScheduleBuilder.cronSchedule;
|
import static org.quartz.TriggerBuilder.newTrigger;
|
import static org.quartz.JobBuilder.newJob;
|
import cn.net.communion.dbdatasync.dbhelper.Factory;
|
import cn.net.communion.dbdatasync.entity.DbInfo;
|
import cn.net.communion.dbdatasync.entity.JobInfo;
|
/**
|
* 读取xml配置文件
|
* @author Administrator
|
*
|
*/
|
public class App
|
{
|
|
private DbInfo srcDb;
|
private DbInfo destDb;
|
private List<JobInfo> jobList;
|
private String code;
|
private static Logger logger = Logger.getLogger(App.class);
|
|
public void init(){
|
|
srcDb = new DbInfo();
|
destDb = new DbInfo();
|
jobList = new ArrayList<JobInfo>();
|
SAXReader reader = new SAXReader();
|
try {
|
//读取xml的配置文件名,并获取其里面的节点
|
Element root = reader.read("jobs.xml").getRootElement();
|
Element src = root.element("source");
|
Element dest = root.element("dest");
|
Element jobs = root.element("jobs");
|
//遍历job即同步的表
|
for(Iterator it = jobs.elementIterator("job"); it.hasNext();){
|
jobList.add((JobInfo) elementInObject((Element)it.next(), new JobInfo()));
|
}
|
//
|
elementInObject(src, srcDb);
|
elementInObject(dest, destDb);
|
code = root.element("code").getTextTrim();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public Object elementInObject(Element e, Object o) throws IllegalArgumentException, IllegalAccessException{
|
Field[] fields = o.getClass().getDeclaredFields();
|
for(int index = 0; index < fields.length; index++){
|
fields[index].setAccessible(true);
|
fields[index].set(o, e.element(fields[index].getName()).getTextTrim());
|
}
|
return o;
|
}
|
|
public void start(){
|
for(int index = 0; index < jobList.size(); index++){
|
JobInfo jobInfo = jobList.get(index);
|
String logTitle = "[" + code + "]" + jobInfo.getName() + " ";
|
try{
|
SchedulerFactory sf = new StdSchedulerFactory();
|
Scheduler sched = sf.getScheduler();
|
JobDetail job = newJob(DataTask.class).withIdentity("job-" + jobInfo.getName(), code).build();
|
job.getJobDataMap().put("srcDb", srcDb);
|
job.getJobDataMap().put("destDb", destDb);
|
job.getJobDataMap().put("jobInfo", jobInfo);
|
job.getJobDataMap().put("logTitle", logTitle);
|
logger.info(jobInfo.getCron());
|
CronTrigger trigger = newTrigger()
|
.withIdentity("trigger-" + jobInfo.getName(), code)
|
.withSchedule(cronSchedule(jobInfo.getCron())).build();
|
sched.scheduleJob(job, trigger);
|
sched.start();
|
}catch(Exception e){
|
logger.info(logTitle + e.getMessage());
|
logger.info(logTitle + " run failed");
|
continue;
|
}
|
}
|
}
|
public static void main(String[] args )
|
{
|
// 设置默认编码为 UTF-8
|
System.setProperty("file.encoding", "UTF-8");
|
|
App app = new App();
|
app.init();
|
app.start();
|
|
}
|
|
}
|