diff --git a/nms_sync/src/com/nms/main/SyncData.java b/nms_sync/src/com/nms/main/SyncData.java index 9f6a745..cc24cea 100644 --- a/nms_sync/src/com/nms/main/SyncData.java +++ b/nms_sync/src/com/nms/main/SyncData.java @@ -26,6 +26,7 @@ import com.nms.thread.SyncThread; * */ public class SyncData{ + private static Logger logger = Logger.getLogger(SyncData.class); // 线程变量记录任务结果修改的任务id private static final ThreadLocal> threadLocalUpdateMissionIds = new ThreadLocal>(); // 线程变量记录任务结果新增的任务id @@ -37,46 +38,51 @@ public class SyncData{ public static void main(String[] args) { - Logger logger = Logger.getLogger(SyncData.class); - logger.info("同步程序开始启动"); - //从配置文件获取数据库连接信息 - PropKit.use("db.properties"); - //创建主数据库数据源 - DruidPlugin masterDruid=new DruidPlugin(PropKit.get("dburl"),PropKit.get("dbusername"),PropKit.get("dbpassword")); - masterDruid.setInitialSize(Integer.valueOf(PropKit.get("dbInitialSize"))); - masterDruid.setMaxActive(Integer.valueOf(PropKit.get("dbMaxActive"))); - masterDruid.setMinIdle(Integer.valueOf(PropKit.get("dbMinIdle"))); - masterDruid.setMaxWait(Integer.valueOf(PropKit.get("dbMaxWait"))); - masterDruid.setRemoveAbandoned(true); - masterDruid.setRemoveAbandonedTimeoutMillis(Integer.valueOf(PropKit.get("dbRemoveAbandonedTimeout"))); - ActiveRecordPlugin masterArp=new ActiveRecordPlugin("masterDataSource",masterDruid); - masterArp.setShowSql(true); - masterDruid.start(); - masterArp.start(); - logger.info("加载配置文件 设置当前同步 masterDataSource 完成"); - List syncDbInfos = SyncDbInfo.dao.use("masterDataSource").find("select * from sync_db_info"); - logger.info("数据库获取其它分库 数据库连接信息"+JSON.toJSONString(syncDbInfos)); - if(syncDbInfos!=null&&syncDbInfos.size()>0){ - //创建其它数据源的连接 - Conn.createConn(syncDbInfos); - logger.info("分库数据库连接池创建完成"); - // 定时周期执行线程池 用于周期执行线程的运行 - ScheduledExecutorService scheduleService = Executors.newScheduledThreadPool(syncDbInfos.size()); - logger.info("创建线程池完毕 数量大小为"+syncDbInfos.size()); - // 使用scheduleWithFixedDleay在上一个线程任务执行完成后 5分钟执行下一次任务 - for(SyncDbInfo syncDbInfo : syncDbInfos){ - // 主库向分库同步数据 - SyncThread syncThread = Duang.duang(new SyncThread(syncDbInfo)); - logger.info("创建主库同步分库线程执行任务"); - scheduleService.scheduleWithFixedDelay(syncThread, 0, Integer.valueOf(PropKit.use("config.properties").get("syncMaterToSlaveTime")), TimeUnit.MILLISECONDS); - // 分库向主库同步数据 - logger.info("创建分库数据同步到主库线程执行任务"); - SyncSlaveToMasterThread syncSlaveToMasterThread = Duang.duang(new SyncSlaveToMasterThread(syncDbInfo)); - scheduleService.scheduleWithFixedDelay(syncSlaveToMasterThread, 0, Integer.valueOf(PropKit.use("config.properties").get("syncSlaveToMaterTime")), TimeUnit.MILLISECONDS); + try { + Logger logger = Logger.getLogger(SyncData.class); + logger.info("同步程序开始启动"); + //从配置文件获取数据库连接信息 + PropKit.use("db.properties"); + //创建主数据库数据源 + DruidPlugin masterDruid=new DruidPlugin(PropKit.get("dburl"),PropKit.get("dbusername"),PropKit.get("dbpassword")); + masterDruid.setInitialSize(Integer.valueOf(PropKit.get("dbInitialSize"))); + masterDruid.setMaxActive(Integer.valueOf(PropKit.get("dbMaxActive"))); + masterDruid.setMinIdle(Integer.valueOf(PropKit.get("dbMinIdle"))); + masterDruid.setMaxWait(Integer.valueOf(PropKit.get("dbMaxWait"))); + masterDruid.setRemoveAbandoned(true); + masterDruid.setRemoveAbandonedTimeoutMillis(Integer.valueOf(PropKit.get("dbRemoveAbandonedTimeout"))); + ActiveRecordPlugin masterArp=new ActiveRecordPlugin("masterDataSource",masterDruid); + masterArp.setShowSql(true); + masterDruid.start(); + masterArp.start(); + logger.info("加载配置文件 设置当前同步 masterDataSource 完成"); + List syncDbInfos = SyncDbInfo.dao.use("masterDataSource").find("select * from sync_db_info"); + logger.info("数据库获取其它分库 数据库连接信息"+JSON.toJSONString(syncDbInfos)); + if(syncDbInfos!=null&&syncDbInfos.size()>0){ + //创建其它数据源的连接 + Conn.createConn(syncDbInfos); + logger.info("分库数据库连接池创建完成"); + // 定时周期执行线程池 用于周期执行线程的运行 + ScheduledExecutorService scheduleService = Executors.newScheduledThreadPool(syncDbInfos.size()); + logger.info("创建线程池完毕 数量大小为"+syncDbInfos.size()); + // 使用scheduleWithFixedDleay在上一个线程任务执行完成后 5分钟执行下一次任务 + for(SyncDbInfo syncDbInfo : syncDbInfos){ + // 主库向分库同步数据 + SyncThread syncThread = Duang.duang(new SyncThread(syncDbInfo)); + logger.info("创建主库同步分库线程执行任务"); + scheduleService.scheduleWithFixedDelay(syncThread, 0, Integer.valueOf(PropKit.use("config.properties").get("syncMaterToSlaveTime")), TimeUnit.MILLISECONDS); + // 分库向主库同步数据 + logger.info("创建分库数据同步到主库线程执行任务"); + SyncSlaveToMasterThread syncSlaveToMasterThread = Duang.duang(new SyncSlaveToMasterThread(syncDbInfo)); + scheduleService.scheduleWithFixedDelay(syncSlaveToMasterThread, 0, Integer.valueOf(PropKit.use("config.properties").get("syncSlaveToMaterTime")), TimeUnit.MILLISECONDS); + } + }else{ + logger.info("获取同步记录信息失败 请检查数据库数据信息"); + logger.error("获取同步记录信息失败 请检查数据库数据信息"); } - }else{ - logger.info("获取同步记录信息失败 请检查数据库数据信息"); - logger.error("获取同步记录信息失败 请检查数据库数据信息"); + } catch(Exception e) { + e.printStackTrace(); + logger.error("数据同步启动发生异常 信息为:"+e.getMessage()); } }