xiebin
2026-02-09 bf4bf0e15922961be005bbf6693cf306e18d327c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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 )
    {
        App app = new App();
        app.init();
        app.start();
        
    }  
   
}