Explorar el Código

修复第三方调用遗留问题

liukx@elab hace 6 años
padre
commit
eb12bfaccb

+ 2 - 1
elab-log/pom.xml

@@ -32,11 +32,12 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
         </dependency>
+        <!-- 最终执行的日志jar -->
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
             <version>1.2.3</version>
-            <scope>provided</scope>
+            <!--<scope>provided</scope>-->
         </dependency>
 
         <dependency>

+ 0 - 2
elab-log/src/main/java/com/elab/log/CatThreadProcess.java

@@ -10,8 +10,6 @@ import com.elab.log.utils.CatMsgContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.concurrent.ExecutorService;
-
 /**
  * 线程上下文封装类
  *

+ 11 - 5
elab-spring/pom.xml

@@ -89,11 +89,11 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.elab.core</groupId>
-            <artifactId>elab-db</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>com.elab.core</groupId>-->
+            <!--<artifactId>elab-db</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
         <dependency>
             <groupId>javax.validation</groupId>
             <artifactId>validation-api</artifactId>
@@ -137,6 +137,12 @@
             <scope>test</scope>
         </dependency>
 
+        <!--<dependency>-->
+            <!--<groupId>ch.qos.logback</groupId>-->
+            <!--<artifactId>logback-classic</artifactId>-->
+            <!--<version>1.2.3</version>-->
+            <!--<scope>provided</scope>-->
+        <!--</dependency>-->
     </dependencies>
 
 </project>

+ 19 - 7
elab-spring/src/main/java/com/elab/spring/exception/CommonException.java

@@ -10,6 +10,7 @@ import org.springframework.core.env.Environment;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.FieldError;
 import org.springframework.validation.ObjectError;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -43,8 +44,8 @@ public class CommonException {
         logger.error(ex.getMessage(), ex);
         Info info = new Info();
         info.setSuccess(false);
-        info.setErrorCode(environment.getProperty("mvc.common.exception.code",defaultSystemError));
-        info.setMessage(environment.getProperty("mvc.common.exception.message",defaultMessage));
+        info.setErrorCode(environment.getProperty("mvc.common.exception.code", defaultSystemError));
+        info.setMessage(environment.getProperty("mvc.common.exception.message", defaultMessage));
         return info;
     }
 
@@ -58,7 +59,7 @@ public class CommonException {
             List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
             for (int i = 0; i < allErrors.size(); i++) {
                 FieldError objectError = (FieldError) allErrors.get(i);
-                sb.append(objectError.getField() + " 字段值 " + objectError.getRejectedValue() +" - "+ objectError.getDefaultMessage());
+                sb.append(objectError.getField() + " 字段值 " + objectError.getRejectedValue() + " - " + objectError.getDefaultMessage());
             }
         }
         Info info = new Info();
@@ -81,12 +82,23 @@ public class CommonException {
 
     @ExceptionHandler(BusinessException.class)
     @ResponseBody
-    public Object businessException(BusinessException ex) {
-        logger.debug(ex.getMessage(), ex);
+    public Object businessException(BusinessException bx) {
+        logger.debug(bx.getMessage(), bx);
         Info info = new Info();
         info.setSuccess(false);
-        info.setErrorCode(ex.getErrorCode());
-        info.setMessage(ex.getMessage());
+        info.setErrorCode(bx.getErrorCode());
+        info.setMessage(bx.getMessage());
+        return info;
+    }
+
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    @ResponseBody
+    @ResponseStatus(value = HttpStatus.NOT_FOUND)
+    public Object notFondMehtod(Exception ex) {
+        Info info = new Info();
+        info.setSuccess(false);
+        info.setErrorCode("CORE_NOT_FOND");
+        info.setMessage("not fond");
         return info;
     }
 }

+ 91 - 20
elab-spring/src/main/java/com/elab/spring/utils/RestTemplateUtils.java

@@ -2,8 +2,10 @@ package com.elab.spring.utils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.dianping.cat.Cat;
+import com.dianping.cat.message.Transaction;
 import com.elab.core.utils.ObjectUtils;
-import com.elab.log.utils.EventProcessUtils;
+import com.elab.log.utils.CatMsgConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.*;
@@ -68,20 +70,29 @@ public class RestTemplateUtils {
      * @param <T>
      * @return
      */
-    public <T> T post(String url, Object reqParam, Class<T> clazz) {
-        EventProcessUtils.writeThirdParty(url);
+    public <T> T post(String url, Object reqParam, Class<T> clazz)  {
+        String newUrl = getUrl(url);
+        Transaction t = Cat.getProducer().newTransaction(CatMsgConstants.THIRD_PARTY, newUrl);
         logger.info(" URL : " + url);
         if (reqParam != null) {
-            logger.info(" RequestData : " + ObjectUtils.objectParseJsonStr(reqParam));
+            logger.info(" RequestData : " + logData(reqParam));
         }
-
-        //利用容器实现数据封装,发送
-        HttpEntity<Object> entity = new HttpEntity<Object>(reqParam, headers);
-        T o = restTemplate.postForObject(url, entity, clazz);
-        if (o != null) {
-            logger.info(" ResponseData : " + ObjectUtils.objectParseJsonStr(o));
+        T responseData = null;
+        try {
+            //利用容器实现数据封装,发送
+            HttpEntity<Object> entity = new HttpEntity<Object>(reqParam, headers);
+            responseData = restTemplate.postForObject(url, entity, clazz);
+            t.setStatus(Transaction.SUCCESS);
+            if (responseData != null) {
+                logger.info(" ResponseData : " + logData(responseData));
+            }
+        } catch (Exception e) {
+            logger.error("------ 第三方接口调用失败 : ", e);
+            t.setStatus(e.getClass().getSimpleName());
+        } finally {
+            t.complete();
         }
-        return o;
+        return responseData;
     }
 
     /**
@@ -93,11 +104,24 @@ public class RestTemplateUtils {
      * @return
      */
     public <T> T get(String url, Class<T> clazz) {
-        EventProcessUtils.writeThirdParty(url);
+        String newUrl = getUrl(url);
+        Transaction t = Cat.getProducer().newTransaction(CatMsgConstants.THIRD_PARTY, newUrl);
         logger.info(" URL : " + url);
         //利用容器实现数据封装,发送
-        T o = restTemplate.getForObject(url, clazz);
-        return o;
+        T responseData = null;
+        try {
+            responseData = restTemplate.getForObject(url, clazz);
+            t.setStatus(Transaction.SUCCESS);
+            if (responseData != null) {
+                logger.info(" ResponseData : " + logData(responseData));
+            }
+        } catch (Exception e) {
+            logger.error("------ 第三方接口调用失败 : ", e);
+            t.setStatus(e.getClass().getSimpleName());
+        } finally {
+            t.complete();
+        }
+        return responseData;
     }
 
     /**
@@ -112,13 +136,60 @@ public class RestTemplateUtils {
     public <T> T postUpload(String url, Object reqParam, Class<T> clazz) {
         logger.info(" URL : " + url);
         logger.info(" RequestData : " + ObjectUtils.objectParseJsonStr(reqParam));
-        //利用容器实现数据封装,发送
-        HttpEntity<Object> entity = new HttpEntity<Object>(reqParam, new HttpHeaders());
-        ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, clazz);
-        if (exchange != null && exchange.getBody() != null) {
-            logger.info(" ResponseData : " + ObjectUtils.objectParseJsonStr(exchange.getBody()));
+
+        String newUrl = getUrl(url);
+        Transaction t = Cat.getProducer().newTransaction(CatMsgConstants.THIRD_PARTY, newUrl);
+        T responseData = null;
+        try {
+            //利用容器实现数据封装,发送
+            HttpEntity<Object> entity = new HttpEntity<Object>(reqParam, new HttpHeaders());
+            ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, clazz);
+            responseData = exchange.getBody();
+            if (exchange != null && responseData != null) {
+                logger.info(" ResponseData : " + logData(responseData));
+            }
+            t.setStatus(Transaction.SUCCESS);
+        } catch (Exception e) {
+            logger.error("------ 第三方接口调用失败 : ", e);
+            t.setStatus(e.getClass().getSimpleName());
+        } finally {
+            t.complete();
+        }
+        return responseData;
+    }
+
+    /**
+     * 获取除开?号后面的URL
+     *
+     * @param url
+     * @return
+     */
+    private String getUrl(String url) {
+        if (ObjectUtils.isNotEmpty(url)) {
+            String newUrl = url;
+            if (url.indexOf("?") > 0) {
+                newUrl = url.substring(0, url.indexOf("?"));
+            }
+            return newUrl;
+        }
+        return url;
+    }
+
+    private String logData(Object data) {
+        if (data == null) {
+            return "";
+        }
+
+        if (data instanceof String) {
+            return data.toString();
+        }
+        String logData = "";
+        try {
+            logData = ObjectUtils.objectParseJsonStr(data);
+        } catch (Exception e) {
+            return data.toString();
         }
-        return (T) exchange;
+        return logData;
     }
 
     public static void main(String[] args) {

+ 9 - 3
elab-spring/src/test/java/com/elab/spring/utils/RestTemplateUtilsTest.java

@@ -1,5 +1,6 @@
 package com.elab.spring.utils;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 public class RestTemplateUtilsTest {
@@ -8,13 +9,18 @@ public class RestTemplateUtilsTest {
 
     @Test
     public void post() {
-        String url = "http://106.14.133.2:5301/ipAddr/getIpAddr";
+        String url = "http://106.14.133.2:5555/elab-marketing-authentication//ipAddr/getIpAddr";
         String post = restTemplateUtils.post(url, null, String.class);
-        System.out.println(" --- " + post);
+        System.out.println("--->" + post);
+        Assert.assertNotNull(post);
     }
 
+    @Test
     public void get() {
-
+        String url = "http://www.baidu.com";
+        String get = restTemplateUtils.get(url, String.class);
+        System.out.println("--->" + get);
+        Assert.assertNotNull(get);
     }
 
     public void postUpload() {

+ 4 - 11
elab-spring/src/test/resources/logback.xml

@@ -4,22 +4,15 @@
     <jmxConfigurator/>
     <property name="LOG_PATH" value="logs"/>
 
-    <appender name="elab-marketing-authentication" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <File>${LOG_PATH}/elab-marketing-authentication.log</File>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/%d{yyyyMMdd}/%d{yyyyMMdd}-%i.log</fileNamePattern>
-            <maxHistory>30</maxHistory>
-            <totalSizeCap>30GB</totalSizeCap>
-            <maxFileSize>100MB</maxFileSize>
-        </rollingPolicy>
-        <encoder>
-            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%file:%line] - %msg%n</pattern>
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</Pattern>
         </encoder>
     </appender>
     <appender name="cat" class="com.elab.log.log4j.CatLogbackLog">
     </appender>
     <root level="INFO">
-        <appender-ref ref="elab-marketing-authentication"/>
+        <appender-ref ref="stdout"/>
         <appender-ref ref="cat"/>
     </root>
     <logger name="com.elab" level="DEBUG" />