From 30e75b7200d35a44a5247991516318f938f0b223 Mon Sep 17 00:00:00 2001 From: srikanth Date: Fri, 7 Aug 2020 19:53:40 +0530 Subject: [PATCH] implemented Job Scheduler --- CompareTables/pom.xml | 11 ++ .../com/demo/controller/MainController.java | 54 +++++++- .../controller/VerifyMigrationController.java | 16 ++- .../com/demo/service/CompareTwoTables.java | 117 +++++++++++++++++- .../main/java/com/demo/util/MigrationJob.java | 59 +++++++++ 5 files changed, 247 insertions(+), 10 deletions(-) create mode 100644 CompareTables/src/main/java/com/demo/util/MigrationJob.java diff --git a/CompareTables/pom.xml b/CompareTables/pom.xml index 22badd8..6b7bcc5 100644 --- a/CompareTables/pom.xml +++ b/CompareTables/pom.xml @@ -66,6 +66,10 @@ + + org.springframework + spring-context-support + @@ -82,6 +86,13 @@ + + + org.quartz-scheduler + quartz + 2.3.0 + + diff --git a/CompareTables/src/main/java/com/demo/controller/MainController.java b/CompareTables/src/main/java/com/demo/controller/MainController.java index ef2ebca..79c818f 100644 --- a/CompareTables/src/main/java/com/demo/controller/MainController.java +++ b/CompareTables/src/main/java/com/demo/controller/MainController.java @@ -1,10 +1,17 @@ package com.demo.controller; import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.Trigger; +import org.quartz.TriggerBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; @@ -14,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.demo.service.CompareTwoTables; -import com.unboundid.util.json.JSONObject; +import com.demo.util.MigrationJob; @RestController @RequestMapping("/api") @@ -23,6 +30,11 @@ public class MainController { @Autowired CompareTwoTables service; + + + + @Autowired + private Scheduler scheduler; @RequestMapping("/getCompareData") public Map demo(@RequestParam("srcTable") String srcTable, @@ -183,7 +195,7 @@ public class MainController { } @RequestMapping("/migrateBasedOnIgnoreColumnRule") - public Map migrateBasedOnIgnoreColumnRule(@RequestBody Map map) + public Map migrateBasedOnIgnoreColumnRule(@RequestBody Map map) throws ClassNotFoundException, SQLException { String status = service.migrateBasedOnIgnoreColumnRule(map); @@ -196,7 +208,7 @@ public class MainController { } @RequestMapping("/getRules") - public List> getRules() throws Exception { + public List> getRules() throws Exception { return service.getRules(); @@ -281,5 +293,41 @@ public class MainController { return res; } + + @RequestMapping("/scheduleMigration") + public Map scheduleMigration(@RequestBody Map map) + throws Exception { + + System.out.println(map); + + + + String date = map.get("date"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm"); + + date = date.replace("T", " "); + Date convertedCurrentDate = sdf.parse(date); + + JobDetail job = JobBuilder.newJob(MigrationJob.class).withIdentity("dummyJobName", "group1").build(); + + Trigger trigger = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName", "group1") + .startAt(convertedCurrentDate).build(); + + // schedule it + + scheduler.start(); + scheduler.scheduleJob(job, trigger); + + + Map res = new HashMap<>(); + + res.put("status", "Success"); + + return res; + } + + + } diff --git a/CompareTables/src/main/java/com/demo/controller/VerifyMigrationController.java b/CompareTables/src/main/java/com/demo/controller/VerifyMigrationController.java index 8a1004b..e7dc739 100644 --- a/CompareTables/src/main/java/com/demo/controller/VerifyMigrationController.java +++ b/CompareTables/src/main/java/com/demo/controller/VerifyMigrationController.java @@ -4,8 +4,8 @@ import org.springframework.web.bind.annotation.RestController; import com.demo.service.CompareTwoTables; -import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -41,15 +41,25 @@ public class VerifyMigrationController { @RequestMapping("/columns") @ResponseBody - public Map> getColumns(@RequestParam("srcTable") String srcTable,@RequestParam("destTable") String destTable) { - + public Map> getColumns(@RequestParam("srcTable") String srcTable,@RequestParam("destTable") String destTable,@RequestParam("sqlStatus") String sqlStatus) { + System.out.println(srcTable); Map> tableColumns = new HashMap>(); + if(sqlStatus.equals("sqlTrue")) { + tableColumns.put("source",service.getSourceColumnsBySql(srcTable)); + tableColumns.put("destination",service.getDestinationColumns(destTable)); + + tableColumns.put("srcKeys",new LinkedList<>()); + tableColumns.put("destKeys",service.getDestinationTablesKey(destTable)); + }else { + tableColumns.put("source",service.getSourceColumns(srcTable)); tableColumns.put("destination",service.getDestinationColumns(destTable)); + tableColumns.put("srcKeys",service.getSourceTablesKey(srcTable)); tableColumns.put("destKeys",service.getDestinationTablesKey(destTable)); + } return tableColumns; diff --git a/CompareTables/src/main/java/com/demo/service/CompareTwoTables.java b/CompareTables/src/main/java/com/demo/service/CompareTwoTables.java index af9465f..aa37ad5 100644 --- a/CompareTables/src/main/java/com/demo/service/CompareTwoTables.java +++ b/CompareTables/src/main/java/com/demo/service/CompareTwoTables.java @@ -1006,7 +1006,7 @@ public class CompareTwoTables { } - public String migrateBasedOnIgnoreColumnRule(Map map) throws SQLException, ClassNotFoundException { + public String migrateBasedOnIgnoreColumnRule(Map map) throws SQLException, ClassNotFoundException { try { DataSource ds = dataSource.sourceDataSource(); @@ -1153,9 +1153,9 @@ public class CompareTwoTables { } - public List> getRules() { + public List> getRules() { - List> rules = new LinkedList<>(); + List> rules = new LinkedList<>(); try { @@ -1176,7 +1176,7 @@ public class CompareTwoTables { } while (rs_source.next()) { - HashMap map = new HashMap<>(); + HashMap map = new HashMap<>(); for (String colName : rs_source_columns) { map.put(colName, rs_source.getString(colName)); @@ -2133,5 +2133,114 @@ public class CompareTwoTables { con.close(); return 1; } + + + public void jobStart() throws ClassNotFoundException, SQLException { + + System.out.println("-----------------jobStart-------------------"); + + + List> rulesList = getRules(); + + for (Map mainMap : rulesList) { + + System.out.println(mainMap); + + Map map = new HashMap<>(); + + map.put("sourceTable", mainMap.get("SRCTBL")); + map.put("destTable", mainMap.get("DESTTBL")); + map.put("srcKey", mainMap.get("SRC_KEY")); + map.put("destKey", mainMap.get("DEST_KEY")); + map.put("ruleName", mainMap.get("RULE_NAME")); + map.put("value1", mainMap.get("VALUE1")); + map.put("value2", mainMap.get("VALUE2")); + map.put("value3", mainMap.get("VALUE3")); + map.put("whereCondition", mainMap.get("FILTER_CONDITION")); + map.put("SRC_COLUMNS", mainMap.get("SRC_COLUMNS")); + map.put("DEST_COLUMNS", mainMap.get("DEST_COLUMNS")); + map.put("value4", mainMap.get("VALUE4")); + + + String rule = (String) map.get("ruleName"); + System.out.println("-->"+rule); + + if(rule.equals("IgnoreColumns")){ + + + String status = migrateBasedOnIgnoreColumnRule(map); + + System.out.println(status); + } + + else if(rule.equals("SplitColumns")){ + + String status = migrateBasedOnSplitRule(map); + System.out.println(status); + } + + else if(rule.equals("MergeColumns")){ + + String status = migrateBasedOnMergeColumnsRule(map); + System.out.println(status); + + } + + else if(rule.equals("Scalar")){ + + String status = migrateBasedOnScalarColumnsRule(map); + System.out.println(status); + + } + else if(rule.equals("AggregateColumns")){ + + String status = migrateBasedOnAggregateColumnsRule(map); + System.out.println(status); + + } + + else if(rule.equals("DefaultCase")){ + + String status = migrateBasedOnDefaultCaseRule(map); + System.out.println(status); + + } + + + + + } + + } + + public List getSourceColumnsBySql(String srcTable) { + + try { + + DataSource ds = dataSource.appDataSource(); + Connection con = ds.getConnection(); + System.out.println("Connection established......"); + + Statement stmt = con.createStatement(); + + // step4 execute query + ResultSet rs_source = stmt.executeQuery(srcTable); + + ArrayList rs_source_columns = new ArrayList(); + ResultSetMetaData metadata = rs_source.getMetaData(); + int columnCount = metadata.getColumnCount(); + for (int i = 1; i <= columnCount; i++) { + rs_source_columns.add(metadata.getColumnName(i)); + } + + con.close(); + return rs_source_columns; + + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } } diff --git a/CompareTables/src/main/java/com/demo/util/MigrationJob.java b/CompareTables/src/main/java/com/demo/util/MigrationJob.java new file mode 100644 index 0000000..163eb42 --- /dev/null +++ b/CompareTables/src/main/java/com/demo/util/MigrationJob.java @@ -0,0 +1,59 @@ +package com.demo.util; + +import java.sql.SQLException; + +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.scheduling.quartz.QuartzJobBean; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import com.demo.service.CompareTwoTables; + +@Component +public class MigrationJob extends QuartzJobBean { + +// + @Autowired + CompareTwoTables service; + + @Override + protected void executeInternal(JobExecutionContext context) throws JobExecutionException { + // TODO Auto-generated method stub + + + try { + service.jobStart(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + +// public void execute(JobExecutionContext context) +// throws JobExecutionException { +// +// System.out.println("-----------------MigrationJob-------------------"); +// +// +// try { +// service.jobStart(); +// } catch (ClassNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (SQLException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// +// } + +}