
今天程式的候遇到一, A.操作取一, B.接著下一行代是向某服器送 post 求 C.但是某件下可能出方服器一直不回覆,致程序一直卡在等待 post 的 response(什不超常?我也很奈啊) D. 情下,致 A 操作的接池一直未放,最在 druid 配置的 removeAbandoned timeout maxActive 到峰值,造成其他 dao 一直等待接池放. 而致程式卡死或者 500 情那位大佬遇到,怎理?
B 操作所依的必自 A ,而且 B 操作完的返回 post 也需要上使用到. 求解.
下面常信息,com.jh.pay 是我自己程序的 package,ctrl+F 可快速:
11:10:29 ERROR c.alibaba.druid.pool.DruidDataSource[2189] abandon connection, owner thread: http-nio-9011-exec-513, connected at : 1499308823002, open stackTrace at java.lang.Thread.getStackTrace(Thread.java:1556) at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1068) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544) at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:662) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540) at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:831) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:992) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:984) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:103) at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:225) at com.sun.proxy.$Proxy28.setReadOnly(Unknown Source) at org.springframework.jdbc.datasource.DataSourceUtils.prepareConnectionForTransaction(DataSourceUtils.java:155) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:178) at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:380) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:430) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy52.findAll(Unknown Source) at com.jh.pay.service.impl.RechargeDetailServiceImpl.findByOrderNumber(RechargeDetailServiceImpl.java:111) at com.jh.pay.controller.WxPayController.payMoney(WxPayController.java:210) at sun.reflect.GeneratedMethodAccessor207.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:65) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicatinFilterChain.doFilter(ApplicationFilterChain.java:165) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) ownerThread current state is RUNNABLE, current stackTrace at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593) at sun.security.ssl.InputRecord.read(InputRecord.java:532) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) at com.jh.pay.wxpay.utils.HttpClientUtil.doPostXML(HttpClientUtil.java:188) at com.jh.pay.wxpay.WxPay.doQrPay(WxPay.java:94) at com.jh.pay.service.impl.PayServiceImpl.wxpay(PayServiceImpl.java:88) at com.jh.pay.controller.WxPayController.payMoney(WxPayController.java:302) at sun.reflect.GeneratedMethodAccessor207.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:65) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 代如下:
rechargeDetailService.findByOrderNumber(orderNumber); 即A操作(不知道什接池就是不放)
payService.wxpay(money, orderNumber, testMerchatConfigId); 向微信服器行POST操作
/** * 创建微信订单 并且把微信返回的信息放到session */ @RequestMapping(value = "/pub/wx/payMoney", method = {RequestMethod.GET, RequestMethod.POST}) public String payMoney( @RequestParam("appId") String appId, @RequestParam("payMoney") String payMoney, @RequestParam("orderNumber") String orderNumber, @RequestParam("callBackUrl") String callBackUrl, @RequestParam("hrefBackUrl") String hrefBackUrl, @RequestParam(value = "payType", required = false, defaultValue = "") String payType, @RequestParam("sign") String sign, @RequestParam(value = "testMerchatConfigId", required = false) Long testMerchatConfigId, HttpServletRequest httpServletRequest, Model model) { //判断该订单是否已经存在 List<RechargeDetail> rechargeDetailList = rechargeDetailService.findByOrderNumber(orderNumber); if (rechargeDetailList.size() > 0) { RechargeDetail rechargeDetail = rechargeDetailList.get(0); Map map = Maps.newHashMap(); map.put("code_url", rechargeDetail.getWeChatCodeUrl()); if (rechargeDetail.getPayType() == PayType.PAY) { model.addAttribute("error", "该订单已经支付过,请勿重复支付 !"); } model.addAttribute("payMap", map); model.addAttribute("payNo", orderNumber); return "/wx/showEwm"; } UserMerchantList userMerchantList = userMerchantListService.findByAppId(appId); if (userMerchantList == null) { model.addAttribute("error", "签名错误:AppId " + appId + " 不存在!"); return "/wx/showEwm"; } StringBuilder sb = new StringBuilder(""); sb.append("appId=").append(appId). append("&payMOney=").append(payMoney). append("&orderNumber=").append(orderNumber). append("&callBackUrl=").append(callBackUrl). append("&hrefBackUrl=").append(hrefBackUrl); // if (StringUtils.isNotBlank(payMoney)) { // sb.append("&payType=").append(payType); // } sb.append(userMerchantList.getKey()); SignatureUtlis signatureUtlis = new SignatureUtlis(); String result; try { result = signatureUtlis.signatureCmd5(sb.toString()); } catch (Exception e) { e.printStackTrace(); model.addAttribute("error", "签名错误:" + e.getMessage()); return "/wx/showEwm"; } if (!(StringUtils.isNotBlank(result) && result.equals(sign))) { model.addAttribute("error", "签名错误!"); return "/wx/showEwm"; } User user = userService.findByUserNameIfNotExitCreate(orderNumber); Double money; try { mOney= Double.valueOf(payMoney); } catch (NumberFormatException numberFormatEx) { model.addAttribute("error", "获取金额失败,金额格式错误:" + payMoney); return "/wx/showEwm"; } RechargeDetail rechargeDetail = new RechargeDetail(); //设置订单为 未付款 rechargeDetail.setPayType(PayType.NOT_PAY); rechargeDetail.setUser(user); rechargeDetail.setCallTotal(0); rechargeDetail.setCreateDate(new Date()); rechargeDetail.setRechargeNo(orderNumber); rechargeDetail.setUserAppId(appId); rechargeDetail.setCallType(CallType.NO); rechargeDetail.setCallBackUrl(callBackUrl); rechargeDetail.setHrefBackUrl(hrefBackUrl); rechargeDetail.setMoney(money); rechargeDetail.setIpAddr(IpAddrUtils.getRemoteAddr(httpServletRequest)); StringBuilder sb2 = new StringBuilder(""); sb2.append("appId=").append(rechargeDetail.getUserAppId()). append("&orderNumber=").append(rechargeDetail.getRechargeNo()). append("&orderStatus=").append("Yes"); String resultSignature = ""; try { resultSignature = signatureUtlis.signatureCmd5(sb2.toString() + userMerchantList.getKey()); } catch (Exception e) { e.printStackTrace(); log.debug("签名错误:" + e.getMessage()); } sb2.append("&sign=").append(resultSignature); rechargeDetail.setSignStr(sb2.toString()); //判断是否是私人微信 if (YES.equals(userMerchantList.getIsPerson())) { rechargeDetail.setIsPersonPay(YES); rechargeDetail.setStrMark(getRoamStr(money)); rechargeDetailService.save(rechargeDetail); model.addAttribute("id", userMerchantList.getId()); model.addAttribute("money", money); model.addAttribute("payNo", orderNumber); model.addAttribute("mark", rechargeDetail.getStrMark()); return "/wx/showPersonEwm"; } else { rechargeDetail.setIsPersonPay(NO); //如果是企业微信或者企业支付宝 Map<String, Object> payMap; //如果是微信 if (!"ali".equals(payType)) { try { payMap = payService.wxpay(money, orderNumber, testMerchatConfigId); } catch (WxExceptions wxExceptions) { model.addAttribute("error", wxExceptions.getMessage()); return "/wx/showEwm"; } //二维码 未获取到 if (payMap.get("code_url") == null) { model.addAttribute("error", "充值失败,未获取到微信二维码!" + payMap.get("return_msg") + payMap.get("err_code_des")); return "/wx/error"; }
rechargeDetail.setWeChatCodeUrl(payMap.get("code_url").toString()); if (payMap.get("jh_appid") != null) { rechargeDetail.setAppId((String) payMap.get("jh_appid")); } rechargeDetailService.save(rechargeDetail); model.addAttribute("payMap", payMap); model.addAttribute("payNo", orderNumber); return "/wx/showEwm"; } else { 第四附言 忘 markdown了 忽略 我重新一次
//判断是否是私人微信 if (YES.equals(userMerchantList.getIsPerson())) { rechargeDetail.setIsPersonPay(YES); rechargeDetail.setStrMark(getRoamStr(money)); rechargeDetailService.save(rechargeDetail); model.addAttribute("id", userMerchantList.getId()); model.addAttribute("money", money); model.addAttribute("payNo", orderNumber); model.addAttribute("mark", rechargeDetail.getStrMark()); return "/wx/showPersonEwm"; } else { rechargeDetail.setIsPersonPay(NO); //如果是企业微信或者企业支付宝 Map<String, Object> payMap; //如果是微信 if (!"ali".equals(payType)) { try { payMap = payService.wxpay(money, orderNumber, testMerchatConfigId); } catch (WxExceptions wxExceptions) { model.addAttribute("error", wxExceptions.getMessage()); return "/wx/showEwm"; } //二维码 未获取到 if (payMap.get("code_url") == null) { model.addAttribute("error", "充值失败,未获取到微信二维码!" + payMap.get("return_msg") + payMap.get("err_code_des")); return "/wx/error"; } rechargeDetail.setWeChatCodeUrl(payMap.get("code_url").toString()); if (payMap.get("jh_appid") != null) { rechargeDetail.setAppId((String) payMap.get("jh_appid")); } rechargeDetailService.save(rechargeDetail); model.addAttribute("payMap", payMap); model.addAttribute("payNo", orderNumber); return "/wx/showEwm"; } else { payMap = payService.aliPay(money, orderNumber, testMerchatConfigId); //二维码 未获取到 if (payMap.get("qr_code") == null) { model.addAttribute("error", "充值失败,未获取到支付宝二维码!" + payMap.toString()); return "/wx/error"; } rechargeDetail.setWeChatCodeUrl(payMap.get("qr_code").toString()); if (payMap.get("jh_appid") != null) { rechargeDetail.setAppId((String) payMap.get("jh_appid")); } payMap.put("code_url", payMap.get("qr_code")); rechargeDetailService.save(rechargeDetail); model.addAttribute("payMap", payMap); model.addAttribute("payNo", orderNumber); return "/wx/showEwm"; } } } 1 wenzhoou Jul 10, 2017 via Android B 的锅。post 时候 timeout 和 retry 必须要想到。不然多少的连接池也架不住。 不过如果业务上能变成异步处理,那就最好了。 连接数是 tps x 平均响应时间吧。峰值连接数就是 峰值 tps x 峰值响应时间啦。你这峰值响应时间趋于无穷大怎么搞。 |
2 ovear Jul 10, 2017 via Android 请换简体中文 |
3 sagaxu Jul 10, 2017 via Android A 完成的时候就该释放连接了 |
4 Sauryer Jul 10, 2017 via iPhone 程式?楼主是台湾人? |
5 xmh51 Jul 10, 2017 利用 java FutureTask 类 强制设定超时时间 过了 多少秒 如果拿不到结果,就进行异常处理。 |
6 jalena Jul 10, 2017 不贴点代码是最可恶的提问,那么,为啥子不捕获超时这个异常呢?或者设定超时呢~?? |
8 ovear Jul 10, 2017 @tianshilei1992 问题是我看了半天也没看懂。。 a b c 代表的到底是操作,还是不同的服务 |
9 vingz Jul 10, 2017 A 和 B 应该是异步隔离,A 操作完成后,把数据发给 B 去处理,A 释放数库连接; B 收到数据后发 post 请求,设置 socket 的读写超时时间,这样一直没有 response 的时候 B 会报错。 A 和 B 要是多线程,线程之间可以通过消息通信。 |
10 v2orz Jul 10, 2017 发送 post 的 httpClient 或者别的什么,设置合理的超时时间 顺便,A 操作获取到结果后,数据库连接就应该已经还给连接池了 |
13 teemoer OP |
14 letitbesqzr Jul 10, 2017 手动管理事务 |
15 hcymk2 Jul 10, 2017 |
16 hcymk2 Jul 10, 2017 |
19 zacard Jul 10, 2017 这里面问题非常多。。。。 有个原则:调用外部资源都应该设置超时! |
20 letitbesqzr Jul 10, 2017 看莪焱看 |
21 letitbesqzr Jul 10, 2017 ㄣ`怼我绝情,蹴怪我怼情~ |
22 letitbesqzr Jul 10, 2017 ┈┾分,是莪蕞的悲哀 ̄* |
23 LavenderLee Jul 10, 2017 ヤ我鞍锝走掉,яáδρì |
24 DonaidTrump Jul 10, 2017 via iPhone @wayne1943 我感觉是假台湾人,台湾不是叫伺服器嘛 |
26 roooz Jul 10, 2017 这坛子灌水的是越来越多了 |
28 EXE Jul 12, 2017 这么喜欢用繁体,注释为啥不用 |
29 shuangmu Jul 24, 2017 繁体看的我眼睛累 |