From bd81c5caa078594e3561c0149ee6bb3b8ecf5541 Mon Sep 17 00:00:00 2001 From: chenlw <874313221@qq.com> Date: Thu, 22 Sep 2016 08:42:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=BD=E5=8F=96=E6=97=B6?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/base/BaseController.java | 1 + src/com/base/Custom4exception.java | 5 +- src/com/base/CustomException.java | 4 +- src/com/base/i18n.properties | 4 ++ .../controller/DataModelController.java | 56 +---------------- src/com/platform/entities/oracleForm.java | 30 ++++----- src/com/platform/oracle/OracleConnector.java | 43 ++++++++++--- .../platform/service/OracleExtractHelper.java | 63 ++++++++++--------- .../impl/OracleExtractServiceImpl.java | 15 +++-- src/com/platform/utils/Configs.java | 2 +- 10 files changed, 109 insertions(+), 114 deletions(-) diff --git a/src/com/base/BaseController.java b/src/com/base/BaseController.java index 88ef5f48..804f833a 100644 --- a/src/com/base/BaseController.java +++ b/src/com/base/BaseController.java @@ -45,6 +45,7 @@ public class BaseController { System.out.println("URI"+request.getRequestURI()); request.setAttribute("ex", ex); System.err.println("BaseController --exp " + ex); + new CustomException("base_code_", ex); // 根据不同错误转向不同页面 if(ex instanceof CustomException) { CustomException cuse = (CustomException) ex; diff --git a/src/com/base/Custom4exception.java b/src/com/base/Custom4exception.java index a5bc8540..0e109c86 100644 --- a/src/com/base/Custom4exception.java +++ b/src/com/base/Custom4exception.java @@ -27,8 +27,11 @@ public class Custom4exception { public final static String threadVolume_Thread_Except = "3001001002"; /** - * 抽取汇总 + * 抽取汇总--的-获取抽取动作异常 */ public final static String threadVolume_Oracle_Except = "3002001002"; + /** * SQL执行错误 */ + public final static String OracleSQL_Except = "3002001002"; + } diff --git a/src/com/base/CustomException.java b/src/com/base/CustomException.java index 08b75248..3a5663c2 100644 --- a/src/com/base/CustomException.java +++ b/src/com/base/CustomException.java @@ -44,7 +44,6 @@ public class CustomException extends Exception { public CustomException(String code,Exception e,Object... obj) { super(code); StringBuffer sbuf= new StringBuffer(); - sbuf.append(msg); this.code = code; sbuf.append(code); sbuf.append("\r\n"); @@ -56,6 +55,8 @@ public class CustomException extends Exception { } // 记录原始的异常 if (null != e) { + sbuf.append(e.getMessage()); + sbuf.append("\r\n"); StackTraceElement[] array = e.getStackTrace(); cause = e.getCause(); for (StackTraceElement stackTraceElement : array) { @@ -68,6 +69,7 @@ public class CustomException extends Exception { Object[] array = obj; sbuf.append("Object[] size : "); sbuf.append(array.length); + sbuf.append("\r\n"); int forSize = 0; if (Constant.CustomException_log_object_size < array.length) { forSize = Constant.CustomException_log_object_size; diff --git a/src/com/base/i18n.properties b/src/com/base/i18n.properties index e69de29b..eee66963 100644 --- a/src/com/base/i18n.properties +++ b/src/com/base/i18n.properties @@ -0,0 +1,4 @@ +3001001001=ThreadVolume\u7C7B\u67E5\u8BE2 volume\u5F02\u5E38 +3001001002=ThreadVolume\u7C7B\u7EBF\u7A0B\u4F11\u7720\u5F02\u5E38 +3002001002= \u62BD\u53D6\u6C47\u603B--\u7684-\u83B7\u53D6\u62BD\u53D6\u52A8\u4F5C\u5F02\u5E38 +3002001002=SQL\u6267\u884C\u9519\u8BEF \ No newline at end of file diff --git a/src/com/platform/controller/DataModelController.java b/src/com/platform/controller/DataModelController.java index ec5ed7a4..7fe91f31 100644 --- a/src/com/platform/controller/DataModelController.java +++ b/src/com/platform/controller/DataModelController.java @@ -11,8 +11,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import net.sf.json.JSONObject; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; @@ -27,7 +25,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.base.BaseController; import com.platform.entities.DataInfoEntity; import com.platform.entities.DataInfoEntityMoveTmp; -import com.platform.entities.FolderNode; import com.platform.entities.GatherOracleInfo; import com.platform.entities.PagerOptions; import com.platform.entities.VolumeEntity; @@ -40,7 +37,6 @@ import com.platform.service.IMoveDataService; import com.platform.service.IMySqlService; import com.platform.service.IOracleExtractService; import com.platform.service.OracleStatusService; -import com.platform.utils.Bean2MapUtils; import com.platform.utils.Configs; import com.platform.utils.UtilsHelper; @@ -138,10 +134,10 @@ public class DataModelController extends BaseController{ @RequestMapping(value="/oracle/{name}/extract", method= RequestMethod.POST) public void oracleExtract(HttpServletRequest res, HttpServletResponse req,@RequestBody oracleForm form) throws Exception { + Configs.CONSOLE_LOGGER.error("/oracle/{name}/extract"); res.setCharacterEncoding("UTF-8"); - if (null != form.getCollOracle() && form.getCollOracle().size() > 0) { - - OracleExtract.extractOracle(form.getTotalOracleName(), form.getCollOracle(), form.getTotalOracle()); + if (null != form.getInneed() && form.getInneed().size() > 0) { + OracleExtract.extractOracle(form.getName(), form.getInneed(), form.getTarget()); } req.setStatus(200); } @@ -183,31 +179,7 @@ public class DataModelController extends BaseController{ @RequestMapping(value = "/volume/{name}/move", method= RequestMethod.POST) @ResponseBody public void volumeMove(HttpServletRequest res, HttpServletResponse req,@RequestBody volumeMoveForm form) throws Exception { -// res.setCharacterEncoding("UTF-8"); -// System.out.println("get Request"); -// Map paramMap = res.getParameterMap(); -//// System.out.println(paramMap); -// String[] nodes = paramMap.get("selectNode"); -// Map map = null; -// for (String string : nodes) { -// System.out.println(string); -// JSONObject jsonobject = JSONObject.fromObject(string); -// map = jsonobject; -// } -// String dstVolume = (String) map.get("volume"); - -// List listItemPath = new ArrayList(); -// String[] items = paramMap.get("selectItems"); -// System.out.println("selectItems"); List datas = new ArrayList(); -// List srcVolumes = new ArrayList(); -// for (String string : items) { -// System.out.println(string); -// JSONObject jsobj = JSONObject.fromObject(string); -// Map itemmap = jsobj; -// DataInfoEntity data = (DataInfoEntity) Bean2MapUtils.convertMap(DataInfoEntity.class, itemmap); -// datas.add(data); -// } List selectItems = form.getSelectItems(); if (null == selectItems) { req.setStatus(200); @@ -221,28 +193,6 @@ public class DataModelController extends BaseController{ } req.setStatus(200); } -// public Object volumeMove(HttpServletRequest res, HttpServletResponse req, String name, -// @RequestBody FolderNode selectNode, @RequestBody List selectItems) throws Exception { -// log.debug("-----/volume/{name}/move------"); -//// Map paramMap = res.getParameterMap(); -//// System.out.println(paramMap); -// Map paramMap = res.getParameterMap(); -// log.debug(paramMap); -// //汇总库 对象信息--带有tableName- -// String[] nodes = (String[]) paramMap.get("selectNode"); -// Map map = null; -// JSONObject jsonobject = JSONObject.fromObject(string); -// map = jsonobject; -// -// -// log.debug(selectItems); -// log.debug(selectNode); -// boolean result = false ; -// if (selectItems.size() >0) { -// result = moveDataService.moveData(selectItems, selectNode.getPath()); -// } -// return result; -// } @RequestMapping(value="/oracle/list", method= RequestMethod.POST) @ResponseBody diff --git a/src/com/platform/entities/oracleForm.java b/src/com/platform/entities/oracleForm.java index 3e130066..1ea62bd4 100644 --- a/src/com/platform/entities/oracleForm.java +++ b/src/com/platform/entities/oracleForm.java @@ -4,52 +4,52 @@ import java.util.List; public class oracleForm { - private GatherOracleInfo totalOracle; + private GatherOracleInfo target; - private List collOracle; + private List inneed; - private String totalOracleName; + private String name; /** * @return the totalOracle */ - public GatherOracleInfo getTotalOracle() { - return totalOracle; + public GatherOracleInfo getTarget() { + return target; } /** * @param totalOracle the totalOracle to set */ - public void setTotalOracle(GatherOracleInfo totalOracle) { - this.totalOracle = totalOracle; + public void setTarget(GatherOracleInfo target) { + this.target = target; } /** * @return the collOracle */ - public List getCollOracle() { - return collOracle; + public List getInneed() { + return inneed; } /** * @param collOracle the collOracle to set */ - public void setCollOracle(List collOracle) { - this.collOracle = collOracle; + public void setInneed(List inneed) { + this.inneed = inneed; } /** * @return the totalOracleName */ - public String getTotalOracleName() { - return totalOracleName; + public String getName() { + return name; } /** * @param totalOracleName the totalOracleName to set */ - public void setTotalOracleName(String totalOracleName) { - this.totalOracleName = totalOracleName; + public void setName(String name) { + this.name = name; } } diff --git a/src/com/platform/oracle/OracleConnector.java b/src/com/platform/oracle/OracleConnector.java index c7749648..5bff5eea 100644 --- a/src/com/platform/oracle/OracleConnector.java +++ b/src/com/platform/oracle/OracleConnector.java @@ -6,6 +6,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import com.base.Custom4exception; +import com.base.CustomException; import com.platform.utils.Configs; public class OracleConnector { @@ -15,27 +17,29 @@ public class OracleConnector { Configs.CONSOLE_LOGGER.info("Oracle驱动加载成功"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block + new CustomException(Custom4exception.OracleSQL_Except, e); e.printStackTrace(); } } - public static Connection ConnectionBuilder(String url, String user, + public synchronized static Connection ConnectionBuilder(String url, String user, String password) { Connection conn=null; try { conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { + new CustomException(Custom4exception.OracleSQL_Except, e); Configs.CONSOLE_LOGGER.info("创建oracle连接失败: [" + e.getMessage() + "]"); } return conn; } - public static boolean canConnect(String url, String user, String password) { + public synchronized static boolean canConnect(String url, String user, String password) { return (null != ConnectionBuilder(url, user, password)); } - public ResultSet getSQLExecResultSet(Connection conn, String sql) { + public synchronized static ResultSet getSQLExecResultSet(Connection conn, String sql) { ResultSet resultSet = null; try { Statement statement = conn @@ -45,12 +49,13 @@ public class OracleConnector { } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); + new CustomException(Custom4exception.OracleSQL_Except, e); } return resultSet; } - public ResultSet getSQLExecResultSet(String url, String user, + public synchronized static ResultSet getSQLExecResultSet(String url, String user, String password, String sql) { return getSQLExecResultSet(ConnectionBuilder(url, user, password), sql); } @@ -59,18 +64,38 @@ public class OracleConnector { * 执行对oracle数据库的增、删 * @param conn * @param sql - * @return 是否执行成功 + * @return true:执行的不返回集合数据的sql成功, 是否执行成功 */ - public boolean execOracleSQL(Connection conn, String sql) { + public synchronized static boolean execOracleSQL(Connection conn, String sql) { boolean flag = false; try { Statement statement = conn.createStatement(); - if (statement.executeUpdate(sql) > 0) + statement.execute(sql); + flag = true; + } catch (SQLException e) { + flag = false; + e.printStackTrace(); + new CustomException(Custom4exception.OracleSQL_Except, e); + } + return flag; + } + /** + * 执行对oracle数据库的增、删 + * @param conn + * @param sql + * @return true:执行结果大于1,即有数据 是否执行成功 + */ + public synchronized static boolean execUpdateOracleSQL(Connection conn, String sql) { + boolean flag = false; + try { + Statement statement = conn.createStatement(); + if(statement.executeUpdate(sql) > 0) flag = true; } catch (SQLException e) { - // TODO Auto-generated catch block + flag = false; e.printStackTrace(); + new CustomException(Custom4exception.OracleSQL_Except, e, sql); } return flag; - } + } } \ No newline at end of file diff --git a/src/com/platform/service/OracleExtractHelper.java b/src/com/platform/service/OracleExtractHelper.java index b8c919ad..3a82e82c 100644 --- a/src/com/platform/service/OracleExtractHelper.java +++ b/src/com/platform/service/OracleExtractHelper.java @@ -14,8 +14,6 @@ import com.platform.utils.FileOperateHelper; public class OracleExtractHelper { - private OracleConnector oConnector; - /** * 判断dblink是否已经存在 * @@ -26,15 +24,17 @@ public class OracleExtractHelper { */ private boolean hasSameNameDBLink(Connection conn, String linkName) { boolean flag = false; - String sql = "SELECT * FROM ALL_DB_LINKS WHERE DB_LINK=" + linkName; - ResultSet rSet = oConnector.getSQLExecResultSet(conn, sql); + String sql = "SELECT * FROM ALL_DB_LINKS WHERE DB_LINK='" + linkName+"'"; + ResultSet rSet = null; try { + rSet = OracleConnector.getSQLExecResultSet(conn, sql); rSet.last(); if (rSet.getRow() > 0) flag = true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); + new CustomException(Custom4exception.threadVolume_Oracle_Except, e, rSet); } return flag; } @@ -54,22 +54,22 @@ public class OracleExtractHelper { + oc.getUser() + " IDENTIFIED BY " + oc.getPassword() - + " USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = " + + " USING \'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = " + oc.getIp() + ")(PORT = " + oc.getPort() + ")))(CONNECT_DATA =(SERVICE_NAME =" + oc.getDatabaseName() - + ")))';"; + + ")))\'"; if (null != oc) { if (hasSameNameDBLink(conn, linkName)) { // 如果dblink已经存在,先删除dblink,在创建dblink - String deleteSql = "DROP PUBLIC DATABASE LINK LinkTo" + String deleteSql = "DROP PUBLIC DATABASE LINK " + linkName; FileOperateHelper .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), deleteSql+"\r\n"); - if (oConnector.execOracleSQL(conn, deleteSql)) { + if (OracleConnector.execOracleSQL(conn, deleteSql)) { FileOperateHelper.fileWrite(Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql+"\r\n"); - oConnector.execOracleSQL(conn, sql); + OracleConnector.execOracleSQL(conn, sql); } else { Configs.CONSOLE_LOGGER.error("删除已有的DBLink失败,无法创建新的DBLink!"); FileOperateHelper.fileWrite(Configs.EXTRACT_LOG_LOCALTION @@ -78,7 +78,7 @@ public class OracleExtractHelper { } else { // 否则,创建dblink - oConnector.execOracleSQL(conn, sql); + OracleConnector.execOracleSQL(conn, sql); FileOperateHelper.fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql); } @@ -95,7 +95,7 @@ public class OracleExtractHelper { public boolean createTableSpace(Connection conn, GatherOracleInfo oc) { String tmpSql = "select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME = '" + Configs.GATHER_TABLESPACE_NAME + "'"; - if (oConnector.execOracleSQL(conn, tmpSql)) { + if (OracleConnector.execUpdateOracleSQL(conn, tmpSql)) { FileOperateHelper .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), @@ -110,7 +110,7 @@ public class OracleExtractHelper { .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql+"\r\n"); - return oConnector.execOracleSQL(conn, sql); + return OracleConnector.execOracleSQL(conn, sql); } } @@ -120,20 +120,20 @@ public class OracleExtractHelper { * @param conn 汇总库连接 * @param oc 汇总库信息 */ - public void createUser(Connection conn, GatherOracleInfo oc) { - String strTUser = oc.getName() + Configs.TABLE_SUFFIX; + public void createUser(Connection conn, OracleConnectorParams oc, GatherOracleInfo totalOracle) { + String strTUser = oc.getName() + totalOracle.getSuffix(); String sql = "Create user " + strTUser + " default tablespace " + Configs.GATHER_TABLESPACE_NAME + " identified by " + Configs.GATHER_TABLE_PASSWORD; String grantSql = "grant connect, resource, dba to " + strTUser; - oConnector.execOracleSQL(conn, sql); + OracleConnector.execOracleSQL(conn, sql); FileOperateHelper .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql+"\r\n"); - oConnector.execOracleSQL(conn, grantSql); + OracleConnector.execOracleSQL(conn, grantSql); FileOperateHelper .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), @@ -158,23 +158,30 @@ public class OracleExtractHelper { + " t WHERE t.TABLESPACE_NAME NOT IN ('SYSTEM','SYSAUX')" + " and t.owner||t.table_name not in (select owner||table_name from dba_tables@linkTo" + oc.getName() + " where 'data_type'='CLOB')"; - ResultSet rsSet = oConnector.getSQLExecResultSet(conn, sql); + ResultSet rsSet = OracleConnector.getSQLExecResultSet(conn, sql); FileOperateHelper .fileWrite( Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql+"\r\n"); - try { - while (rsSet.next()) { - String resultSql = rsSet.getString(0); - oConnector.execOracleSQL(conn, resultSql); - FileOperateHelper - .fileWrite( - Configs.EXTRACT_LOG_LOCALTION + oc.getName(), - resultSql+"\r\n"); + try { + while (rsSet.next()) { + try { + rsSet.getRow(); + String resultSql = rsSet.getString(1); + OracleConnector.execUpdateOracleSQL(conn, resultSql); + FileOperateHelper + .fileWrite( + Configs.EXTRACT_LOG_LOCALTION + oc.getName(), + resultSql+"\r\n"); + + } catch (SQLException e) { + new CustomException(Custom4exception.threadVolume_Oracle_Except, e, rsSet.getString(1)); + } + } + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - } catch (SQLException e) { - new CustomException(Custom4exception.threadVolume_Oracle_Except, e); - } } } diff --git a/src/com/platform/service/impl/OracleExtractServiceImpl.java b/src/com/platform/service/impl/OracleExtractServiceImpl.java index 7be5d033..ee5fbcb6 100644 --- a/src/com/platform/service/impl/OracleExtractServiceImpl.java +++ b/src/com/platform/service/impl/OracleExtractServiceImpl.java @@ -7,6 +7,8 @@ import java.util.Map; import org.springframework.stereotype.Service; +import com.base.Custom4exception; +import com.base.CustomException; import com.platform.entities.GatherOracleInfo; import com.platform.entities.OracleConnectorParams; import com.platform.kubernetes.SimpleKubeClient; @@ -41,21 +43,22 @@ public class OracleExtractServiceImpl implements IOracleExtractService { //采集库连接参数 List datainfos = dataInfolist; - Connection conn = OracleConnector.ConnectionBuilder("jdbc:oracle:thin:@" + oracleModel.getIp() + ":" + oracleModel.getPort() + "/" + Connection conn = OracleConnector.ConnectionBuilder("jdbc:oracle:thin:@" + oracleModel.getIp() + ":" + oracleModel.getPort() + ":" + oracleModel.getDatabaseName(), oracleModel.getUser(), oracleModel.getPassword()); for (OracleConnectorParams collectOracle : datainfos) { - client.updateOrAddReplicasLabelById(collectOracle.getName(), "isExtract", "1"); //更新oracle汇总状态,0标示为未汇总,1标示汇总中,2标示汇总完成 + collectOracle.setName("J"+ collectOracle.getName().replace("-", "_")); +// client.updateOrAddReplicasLabelById(collectOracle.getName(), "isExtract", "1"); //更新oracle汇总状态,0标示为未汇总,1标示汇总中,2标示汇总完成 oracleExtract.createDBLink(conn, collectOracle); //创建dblink oracleExtract.createTableSpace(conn, oracleModel); //创建表空间 - oracleExtract.createUser(conn, oracleModel);//创建用户并授权 + oracleExtract.createUser(conn, collectOracle, oracleModel);//创建用户并授权 oracleExtract.extractColleDB(conn, collectOracle);//执行抽取 - client.updateOrAddReplicasLabelById(collectOracle.getName(), "isExtract", "2"); //更新oracle汇总状态,0标示为未汇总,1标示汇总中,2标示汇总完成 +// client.updateOrAddReplicasLabelById(collectOracle.getName(), "isExtract", "2"); //更新oracle汇总状态,0标示为未汇总,1标示汇总中,2标示汇总完成 } isSuccess = true; }catch(Exception e){ - + new CustomException(Custom4exception.OracleSQL_Except, e); } - return false; + return isSuccess; } // @Override diff --git a/src/com/platform/utils/Configs.java b/src/com/platform/utils/Configs.java index 2160662d..82b1ac16 100644 --- a/src/com/platform/utils/Configs.java +++ b/src/com/platform/utils/Configs.java @@ -42,7 +42,7 @@ public class Configs { public static String TABLE_SUFFIX = "_20152016"; //汇总库汇总表的后缀名 - public static String EXTRACT_LOG_LOCALTION = "/home/log"; //数据汇总日志保存位置 + public static String EXTRACT_LOG_LOCALTION = "C:\\log"; //数据汇总日志保存位置 public static String GATHER_TABLESPACE_NAME=""; //表空间名