package com.share.swing; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.swing.AbstractCellEditor; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.apache.commons.lang.StringUtils; import com.alibaba.fastjson.JSONObject; import com.share.service.cassandra.CassandraFactory; import com.share.service.elasticsearch.transport.ElasticsearchTransportFactory; import com.share.service.greenplum.GreenplumFactory; import com.share.service.jdbc.JDBCFactory; import com.share.service.mongodb.MongoDBFactory; import com.share.swing.DataInfo.Config; import com.share.util.DateUtil; import com.share.util.StringUtil; public class ManageTable extends CommonFrame { private static final long serialVersionUID = 8927006591622687297L; /** * 同步列表 */ public static List<DataInfo> SYN_DATA= new ArrayList<DataInfo>(); public ManageTable() { super._init(); container = this.getContentPane(); container.setForeground(Color.BLACK); container.setBackground(new Color(255, 255, 255)); container.setFont(new Font("仿宋", Font.PLAIN, 12)); container.setLayout(null); init(); } protected void init(){ container.removeAll(); JTabbedPane jtab = new JTabbedPane(JTabbedPane.TOP); jtab.setFont(new Font("宋体", Font.BOLD, 14)); jtab.setBounds(0, 0, width, height); JPanel canaltab = new JPanel(); canaltab.setName("canaltab"); jtab.addTab(ResourceHolder.getProperty("dstt.service.canal"), canaltab); jtab.setLayout(jtab.getLayout()); JPanel syntab = new JPanel(); syntab.setBackground(Color.WHITE); syntab.setName("syntab"); syntab.setLayout(jtab.getLayout()); jtab.addTab(ResourceHolder.getProperty("dstt.service.datasyn"), syntab); JPanel logtab = new JPanel(); logtab.setBackground(Color.WHITE); logtab.setName("logtab"); logtab.setLayout(jtab.getLayout()); jtab.addTab(ResourceHolder.getProperty("dstt.service.datalog"), logtab); jtab.setSelectedComponent(syntab); jtab.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JTabbedPane jtab = (JTabbedPane)e.getSource(); JPanel panel = (JPanel)jtab.getSelectedComponent(); String name = panel.getName(); panel.repaint(); if("canaltab".equalsIgnoreCase(name)){ }else if("logtab".equalsIgnoreCase(name)){ }else{ System.out.println("----"+name); syn(panel); } } }); container.add(jtab); syn(syntab); } public void syn(final JPanel default_panel){ final ButtonGroup gbtn = new ButtonGroup(); default_panel.removeAll(); final JButton add = new JButton(ResourceHolder.getProperty("dstt.btn.add")); add.setFont(new Font("宋体", Font.BOLD, 14)); add.setHorizontalAlignment(SwingConstants.CENTER); add.setCursor(new Cursor(Cursor.HAND_CURSOR)); add.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gbtn.clearSelection(); JButton btn = (JButton)e.getSource(); btn.setSelected(true); ConfigDialog.CURRENT_ROW=-1; ConfigDialog.CURRENT_DATA = new DataInfo(); setVisible(false); new ConfigDialog(); } }); add.setBounds(50, 10, 100, 25); gbtn.add(add); default_panel.add(add); final JButton refresh = new JButton(ResourceHolder.getProperty("dstt.btn.refresh")); refresh.setFont(new Font("宋体", Font.BOLD, 14)); refresh.setHorizontalAlignment(SwingConstants.CENTER); refresh.setCursor(new Cursor(Cursor.HAND_CURSOR)); refresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gbtn.clearSelection(); JButton btn = (JButton)e.getSource(); btn.setSelected(true); syn(default_panel); } }); refresh.setBounds(150, 10, 100, 25); gbtn.add(refresh); default_panel.add(refresh); final JButton synall = new JButton(ResourceHolder.getProperty("dstt.btn.synall")); synall.setFont(new Font("宋体", Font.BOLD, 14)); synall.setHorizontalAlignment(SwingConstants.CENTER); synall.setCursor(new Cursor(Cursor.HAND_CURSOR)); synall.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gbtn.clearSelection(); JButton btn = (JButton)e.getSource(); btn.setSelected(true); } }); synall.setBounds(250, 10, 100, 25); gbtn.add(synall); default_panel.add(synall); Object[][] hdata = new Object[0][2]; String[] hcolumns = {ResourceHolder.getProperty("dstt.ds.source"), ResourceHolder.getProperty("dstt.ds.target")}; JTable table = new JTable(hdata, hcolumns); JTableHeader header = table.getTableHeader(); header.setReorderingAllowed(false);//表格列不可移动 header.setResizingAllowed(false); DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) header.getDefaultRenderer(); renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//列名居中 header.setDefaultRenderer(renderer); header.setForeground(Color.BLUE); header.setBackground(new Color( 238,232,170)); header.setFont(new Font("楷体", Font.BOLD, 18)); int cwidth = container.getSize().width; cwidth=cwidth>0?cwidth:width; int cheight = container.getSize().height; cheight=cheight>0?cheight:height; JScrollPane scroll = new JScrollPane(table);//滚动条 scroll.setBounds(50, 35, cwidth-100, 27); default_panel.add(scroll); String[] tcolumns = {ResourceHolder.getProperty("dstt.ds.seq"), ResourceHolder.getProperty("dstt.ds.saddress"), ResourceHolder.getProperty("dstt.ds.stype"), ResourceHolder.getProperty("dstt.ds.taddress"),ResourceHolder.getProperty("dstt.ds.ttype"),ResourceHolder.getProperty("dstt.ds.action")}; Object[][] data= handleData(); // JTable dtable = new JTable(data, tcolumns); JTable dtable = new JTable(); dtable.setRowHeight(40); JTableHeader dheader = dtable.getTableHeader(); dheader.setReorderingAllowed(false);//表格列不可移动 dheader.setResizingAllowed(false); DefaultTableCellRenderer drenderer = (DefaultTableCellRenderer) dheader.getDefaultRenderer(); drenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//列名居中 drenderer.setVerticalAlignment(DefaultTableCellRenderer.CENTER); dheader.setDefaultRenderer(renderer); dheader.setForeground(Color.RED); dheader.setBackground(new Color(220,245,255)); dheader.setFont(new Font("Default", Font.BOLD, 14)); JScrollPane scroll1 = new JScrollPane(dtable);//滚动条 scroll1.setBounds(50, 60, cwidth-100, cheight-2*60); default_panel.add(scroll1); DefaultTableModel dmodel = (DefaultTableModel) dtable.getModel(); dmodel.setColumnIdentifiers(tcolumns); for (int i=0;i<data.length;i++) { dmodel.addRow(data[i]); } DefaultTableColumnModel cmodel = (DefaultTableColumnModel)dtable.getColumnModel(); int cnum = cmodel.getColumnCount(); for(int i=0;i<cnum;i++){ TableColumn column = cmodel.getColumn(i); DefaultTableCellRenderer crenderer = new DefaultTableCellRenderer(); crenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//列名居中 crenderer.setVerticalAlignment(DefaultTableCellRenderer.CENTER); if(i%2==0){ if(i==0){ column.setMaxWidth(80); crenderer.setForeground(Color.BLUE); }else{ column.setWidth(scroll1.getWidth()/cnum); } } column.setCellRenderer(crenderer); if(i==cnum-1){ JTableButtonRenderer tablebutton = new JTableButtonRenderer(default_panel); column.setCellRenderer(tablebutton); column.setCellEditor(tablebutton); } } // dtable.invalidate(); this.setVisible(true); this.setResizable(false); this.validate(); this.repaint(); } protected Object[][] handleData(){ Object[][] data=new Object[SYN_DATA.size()][]; for (DataInfo obj : SYN_DATA) { int i = SYN_DATA.indexOf(obj); Config source = obj.getSource(); Config target = obj.getTarget(); String sname = ""; String stype = ""; String tname = ""; String ttype = ""; if(source!=null){ sname = handleServers(source.getServers(),source.getPort()); stype = handleType(source.getType()); } if(target!=null){ tname = handleServers(target.getServers(),target.getPort()); ttype = handleType(target.getType()); } data[i]=new Object[]{i+1,sname,stype,tname,ttype,null}; } return data; } public class JTableButtonRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { private static final long serialVersionUID = 3740170279977660631L; JPanel panel = new JPanel(); private int default_row = -1; public JTableButtonRenderer(final JPanel default_panel){ JButton update = new JButton(ResourceHolder.getProperty("dstt.btn.update")); update.setFont(new Font("宋体", Font.BOLD, 14)); update.setHorizontalAlignment(SwingConstants.CENTER); update.setCursor(new Cursor(Cursor.HAND_CURSOR)); update.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ConfigDialog.CURRENT_ROW=default_row; ConfigDialog.CURRENT_DATA = SYN_DATA.get(default_row); setVisible(false); new ConfigDialog(); } }); panel.add(update); JButton syn = new JButton(ResourceHolder.getProperty("dstt.btn.syn")); syn.setFont(new Font("宋体", Font.BOLD, 14)); syn.setHorizontalAlignment(SwingConstants.CENTER); syn.setCursor(new Cursor(Cursor.HAND_CURSOR)); syn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { DataInfo data = SYN_DATA.get(default_row); handleSyn(data); } }); panel.add(syn); JButton remove = new JButton(ResourceHolder.getProperty("dstt.btn.remove")); remove.setFont(new Font("宋体", Font.BOLD, 14)); remove.setHorizontalAlignment(SwingConstants.CENTER); remove.setCursor(new Cursor(Cursor.HAND_CURSOR)); remove.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // System.out.println("remove:"+SYN_DATA.size()+"-->"+default_row+"-->"+dtable.getRowCount()); if(default_row<SYN_DATA.size()){ SYN_DATA.remove(default_row); } syn(default_panel); } }); panel.add(remove); } @Override public Object getCellEditorValue() { // TODO Auto-generated method stub return null; } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // System.out.println("--1---value:"+value+",isSelected:"+isSelected+",row:"+row+",column:"+column); table.clearSelection(); default_row = row; return panel; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) { // System.out.println("--2---value:"+value+",isSelected:"+isSelected+",hasFocus:"+hasFocus+",row:"+row+",column:"+column); table.clearSelection(); default_row = row; return panel; } } /** * @decription 数据同步 * @author yi.zhang * @time 2017年8月4日 下午5:32:39 * @param obj 数据配置 */ public void handleSyn(DataInfo obj){ if(obj==null){ return; } Config source = obj.getSource(); Config target = obj.getTarget(); if(source==null||target==null){ return; } if(!StringUtil.isEmpty(source.getServers())&&!StringUtil.isEmpty(target.getServers())){ double stype = source.getType(); double ttype = target.getType(); List<String> filter_columns = obj.getFilter_columns(); if(stype==2.1){//Cassandra if(ttype==2.1){//Cassandra cassandra2cassandra(source, target, obj.getMapping(), filter_columns); } if(ttype==2.2){//MongoDB cassandra2mongodb(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==3){//MySQL | SQL Server | Oracle cassandra2sql(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==4){//Greenplum cassandra2greenplum(source, target, obj.getMapping(), filter_columns); } if(ttype==1){//Eleasticsearch // cassandra2eleasticsearch(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==5){//Kafka // cassandra2kafka(source, target, obj.getMapping(), filter_columns); } } if(stype==2.2){//MongoDB if(ttype==2.1){//Cassandra mongodb2cassandra(source, target, obj.getMapping(), filter_columns); } if(ttype==2.2){//MongoDB mongodb2mongodb(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==3){//MySQL | SQL Server | Oracle mongodb2sql(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==4){//Greenplum mongodb2greenplum(source, target, obj.getMapping(), filter_columns); } if(ttype==1){//Eleasticsearch mongodb2eleasticsearch(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==5){//Kafka // mongodb2kafka(source, target, obj.getMapping(), filter_columns); } } if(Double.valueOf(stype).intValue()==3){//MySQL | SQL Server | Oracle if(ttype==2.1){//Cassandra sql2cassandra(source, target, obj.getMapping(), filter_columns); } if(ttype==2.2){//MongoDB sql2mongodb(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==3){//MySQL | SQL Server | Oracle sql2sql(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==4){//Greenplum sql2greenplum(source, target, obj.getMapping(), filter_columns); } if(ttype==1){//Eleasticsearch // sql2eleasticsearch(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==5){//Kafka // sql2kafka(source, target, obj.getMapping(), filter_columns); } } if(stype==4.1){//Greenplum if(ttype==2.1){//Cassandra greenplum2cassandra(source, target, obj.getMapping(), filter_columns); } if(ttype==2.2){//MongoDB greenplum2mongodb(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==3){//MySQL | SQL Server | Oracle greenplum2sql(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==4){//Greenplum greenplum2greenplum(source, target, obj.getMapping(), filter_columns); } if(ttype==1){//Eleasticsearch // greenplum2eleasticsearch(source, target, obj.getMapping(), filter_columns); } if(Double.valueOf(ttype).intValue()==5){//Kafka // greenplum2kafka(source, target, obj.getMapping(), filter_columns); } } } } /** * @decription 数据同步(Cassandra-->Cassandra) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void cassandra2cassandra(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } CassandraFactory factory = new CassandraFactory(); factory.init(source.getServers(), source.getKeyspace(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } CassandraFactory tfactory = new CassandraFactory(); tfactory.init(target.getServers(), target.getKeyspace(), target.getUsername(), target.getPassword()); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); // if(!(stables.contains(stable)&&ttables.contains(ttable))){ // System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); // continue; // } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String cql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(cql, null); System.out.println("--目标表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } // tfactory.save(tdata); String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(Cassandra-->MongoDB) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void cassandra2mongodb(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } CassandraFactory factory = new CassandraFactory(); factory.init(source.getServers(), source.getKeyspace(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } MongoDBFactory tfactory = new MongoDBFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword()); // List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String cql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(cql, null); System.out.println("--目标表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(!key.matches("(\\w+)")){ continue; } tdata.replace(reflect.get(key), value); } tfactory.save(ttable, tdata); } } } /** * @decription 数据同步(Cassandra-->MySQL|SQL Server|Oracle) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void cassandra2sql(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } CassandraFactory factory = new CassandraFactory(); factory.init(source.getServers(), source.getKeyspace(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } JDBCFactory tfactory = new JDBCFactory(); String driverName=null,url = null; if(target.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+"/"+target.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(target.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+";database="+target.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(target.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+":"+target.getDatabase(); } tfactory.init(driverName, url,target.getUsername(), target.getPassword(), true, 100, 10); // List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String cql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(cql, null); System.out.println("--目标表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } // tfactory.save(tdata); String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(Cassandra-->Greenplum) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void cassandra2greenplum(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } CassandraFactory factory = new CassandraFactory(); factory.init(source.getServers(), source.getKeyspace(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } GreenplumFactory tfactory = new GreenplumFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword(), true, 100, 10); // List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String cql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(cql, null); System.out.println("--目标表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } // tfactory.save(tdata); String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(MongoDB-->Cassandra) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void mongodb2cassandra(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } MongoDBFactory factory = new MongoDBFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } CassandraFactory tfactory = new CassandraFactory(); tfactory.init(target.getServers(), target.getKeyspace(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); // List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); tfactory.queryColumns(ttable); if(!(stables.contains(stable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } List<?> datas = factory.executeQuery(stable, null, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(MongoDB-->MySQL|SQL Server|Oracle) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void mongodb2sql(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } MongoDBFactory factory = new MongoDBFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } JDBCFactory tfactory = new JDBCFactory(); String driverName=null,url = null; if(target.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+"/"+target.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(target.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+";database="+target.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(target.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+":"+target.getDatabase(); } tfactory.init(driverName, url,target.getUsername(), target.getPassword(), true, 100, 10); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } List<?> datas = factory.executeQuery(stable, null, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(MongoDB-->Greenplum) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void mongodb2greenplum(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } MongoDBFactory factory = new MongoDBFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } GreenplumFactory tfactory = new GreenplumFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword(), true, 100, 10); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } List<?> datas = factory.executeQuery(stable, null, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(MongoDB-->MongoDB) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void mongodb2mongodb(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } MongoDBFactory factory = new MongoDBFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } MongoDBFactory tfactory = new MongoDBFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!stables.contains(stable)){ System.out.println("--数据表["+stable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = ttables!=null&&ttables.contains(ttable)?tfactory.queryColumns(ttable):scolumns; if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } List<?> datas = factory.executeQuery(stable, null, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(!key.matches("(\\w+)")){ continue; } tdata.replace(reflect.get(key), value); } tfactory.save(ttable, tdata); } } } /** * @decription 数据同步(MongoDB-->Eleasticsearch) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void mongodb2eleasticsearch(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } MongoDBFactory factory = new MongoDBFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword()); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } ElasticsearchTransportFactory tfactory = new ElasticsearchTransportFactory(target.getDatabase(), target.getServers(), target.getUsername(), target.getPassword()); tfactory.init(); List<String> stables = factory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!stables.contains(stable)){ System.out.println("--数据表["+stable+"]不存在--"); continue; } // Map<String,String> reflect = new LinkedHashMap<String,String>(); // Map<String, String> scolumns = factory.queryColumns(stable); // Map<String, String> tcolumns = ttables!=null&&ttables.contains(ttable)?tfactory.queryColumns(ttable):scolumns; // if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ // System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); // continue; // } // for(String scolumn:scolumns.keySet()){ // String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); // if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ // continue; // } // for(String tcolumn:tcolumns.keySet()){ // String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); // if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ // continue; // } // if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ // reflect.put(scolumn, tcolumn); // } // } // } // if(reflect.isEmpty()){ // System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); // continue; // } List<?> datas = factory.executeQuery(stable, null, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { JSONObject json = (JSONObject)data; tfactory.upsert(source.getSchema(), ttable, json.getString("_id"), json.toJSONString()); } } } /** * @decription 数据同步([MySQL|SQL Server|Oracle]-->[Cassandra]) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void sql2cassandra(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } JDBCFactory factory = new JDBCFactory(); String driverName=null,url = null; if(source.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+"/"+source.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(source.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+";database="+source.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(source.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+":"+source.getDatabase(); } factory.init(driverName, url,source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } CassandraFactory tfactory = new CassandraFactory(); tfactory.init(target.getServers(), target.getKeyspace(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); // List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步([MySQL|SQL Server|Oracle]-->[MongoDB]) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void sql2mongodb(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } JDBCFactory factory = new JDBCFactory(); String driverName=null,url = null; if(source.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+"/"+source.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(source.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+";database="+source.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(source.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+":"+source.getDatabase(); } factory.init(driverName, url,source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } MongoDBFactory tfactory = new MongoDBFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(!key.matches("(\\w+)")){ continue; } tdata.replace(reflect.get(key), value); } tfactory.save(ttable, tdata); } } } /** * @decription 数据同步([MySQL|SQL Server|Oracle]-->[MySQL|SQL Server|Oracle]) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void sql2sql(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } JDBCFactory factory = new JDBCFactory(); String sdriverName=null; String surl = null; if(source.getType()==3.1){//MySQL sdriverName="com.mysql.jdbc.Driver"; surl = "jdbc:mysql://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+"/"+source.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(source.getType()==3.2){//SQL Server sdriverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; surl = "jdbc:microsoft://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+";database="+source.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(source.getType()==3.3){//Oracle sdriverName="oracle.jdbc.driver.OracleDriver"; surl = "jdbc:oracle:thin:@"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+":"+source.getDatabase(); } factory.init(sdriverName, surl,source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } JDBCFactory tfactory = new JDBCFactory(); String tdriverName=""; String turl = ""; if(source.getType()==3.1){//MySQL tdriverName="com.mysql.jdbc.Driver"; turl = "jdbc:mysql://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+"/"+source.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(source.getType()==3.2){//SQL Server tdriverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; turl = "jdbc:microsoft://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+";database="+source.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(source.getType()==3.3){//Oracle tdriverName="oracle.jdbc.driver.OracleDriver"; turl = "jdbc:oracle:thin:@"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+":"+source.getDatabase(); } tfactory.init(tdriverName, turl,target.getUsername(), target.getPassword(), true, 100, 10); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步([MySQL|SQL Server|Oracle]-->[Greenplum]) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void sql2greenplum(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } JDBCFactory factory = new JDBCFactory(); String driverName=null,url = null; if(source.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+"/"+source.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(source.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+";database="+source.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(source.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+source.getServers()+(source.getPort()>0?":"+source.getPort():"")+":"+source.getDatabase(); } factory.init(driverName, url,source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } GreenplumFactory tfactory = new GreenplumFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword(), true, 100, 10); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(Greenplum-->Cassandra) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void greenplum2cassandra(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } GreenplumFactory factory = new GreenplumFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } CassandraFactory tfactory = new CassandraFactory(); tfactory.init(target.getServers(), target.getKeyspace(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); // List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(Greenplum-->MongoDB) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void greenplum2mongodb(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } GreenplumFactory factory = new GreenplumFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } MongoDBFactory tfactory = new MongoDBFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword()); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(!key.matches("(\\w+)")){ continue; } tdata.replace(reflect.get(key), value); } tfactory.save(ttable, tdata); } } } /** * @decription 数据同步(Greenplum-->Greenplum) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void greenplum2greenplum(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } GreenplumFactory factory = new GreenplumFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } GreenplumFactory tfactory = new GreenplumFactory(); tfactory.init(target.getServers(), target.getDatabase(), target.getSchema(), target.getUsername(), target.getPassword(), true, 100, 10); List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } /** * @decription 数据同步(Greenplum-->[MySQL|SQL Server|Oracle]) * @author yi.zhang * @time 2017年8月4日 下午5:26:59 * @param source 数据源 * @param target 目标库 * @param mapper 表映射 * @param filter_columns 字段过滤 */ protected void greenplum2sql(Config source,Config target,Map<String,String> mapper,List<String> filter_columns){ if(source==null||target==null){ return; } GreenplumFactory factory = new GreenplumFactory(); factory.init(source.getServers(), source.getDatabase(), source.getSchema(), source.getUsername(), source.getPassword(), true, 100, 10); JDBCFactory tfactory = new JDBCFactory(); String driverName=null,url = null; if(target.getType()==3.1){//MySQL driverName="com.mysql.jdbc.Driver"; url = "jdbc:mysql://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+"/"+target.getDatabase()+"?useUnicode=true&characterEncoding=UTF8"; } if(target.getType()==3.2){//SQL Server driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url = "jdbc:microsoft://"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+";database="+target.getDatabase()+";encrypt=true;trustServerCertificate=false;useUnicode=true;characterEncoding=UTF8"; } if(target.getType()==3.3){//Oracle driverName="oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@"+target.getServers()+(target.getPort()>0?":"+target.getPort():"")+":"+target.getDatabase(); } tfactory.init(driverName, url,target.getUsername(), target.getPassword(), true, 100, 10); Map<String,String> mapping = new HashMap<String,String>(); if(mapper==null||mapper.size()==0){ List<String> tables = factory.queryTables(); for (String table : tables) { mapping.put(table, table); } }else{ mapping = mapper; } List<String> stables = factory.queryTables(); List<String> ttables = tfactory.queryTables(); for(String stable : mapping.keySet()){ String ttable = mapping.get(stable); if(!(stables.contains(stable)&&ttables.contains(ttable))){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]不存在--"); continue; } Map<String,String> reflect = new LinkedHashMap<String,String>(); Map<String, String> scolumns = factory.queryColumns(stable); Map<String, String> tcolumns = tfactory.queryColumns(ttable); if(scolumns==null||scolumns.isEmpty()||tcolumns==null||tcolumns.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无合适字段--"); continue; } for(String scolumn:scolumns.keySet()){ String s_column = scolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(scolumn)||filter_columns.contains(s_column))){ continue; } for(String tcolumn:tcolumns.keySet()){ String t_column = tcolumn.trim().toLowerCase().replaceAll("(_+?|-+?)", ""); if(filter_columns!=null&&(filter_columns.contains(tcolumn)||filter_columns.contains(t_column))){ continue; } if(scolumn.equalsIgnoreCase(tcolumn)||scolumn.equalsIgnoreCase(t_column)||s_column.equalsIgnoreCase(tcolumn)||s_column.equalsIgnoreCase(t_column)){ reflect.put(scolumn, tcolumn); } } } if(reflect.isEmpty()){ System.out.println("--数据表["+stable+"]或目标表["+ttable+"]无对应字段--"); continue; } String ssql = "select "+StringUtils.join(reflect.keySet(), ",")+" from "+stable; List<?> datas = factory.executeQuery(ssql, null); System.out.println("--数据表["+stable+"]数据量:"+datas.size()); for (Object data : datas) { Map<String,Object> tdata = new LinkedHashMap<String,Object>(); JSONObject json = (JSONObject)data; for(String key:json.keySet()){ Object value = json.get(key); if(value instanceof Date){ value = DateUtil.formatDateTimeStr((Date)value); } if(value instanceof String){ value = "\""+json.getString(key)+"\""; } tdata.replace(reflect.get(key), value); } String sql = "insert into "+ttable+"("+StringUtils.join(tdata.keySet(), ",")+")values("+StringUtils.join(tdata.values(), ",")+")"; tfactory.executeUpdate(sql); } } } public static void main(String[] args) { JFrame frame = new ManageTable(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }