Java 接池?或者怎提才好? - V2EX /head>
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
teemoer
V2EX    Java

Java 接池?或者怎提才好?

  •  1
     
  •   teemoer Jul 10, 2017 4384 views
    This topic created in 3213 days ago, the information mentioned may be changed or developed.

    今天程式的候遇到一, 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) 
    Supplement 1    Jul 10, 2017

    代如下:

    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(""); 
    Supplement 2    Jul 10, 2017
     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"; } 
    Supplement 3    Jul 10, 2017
     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()); 
    Supplement 4    Jul 10, 2017

    //判断是否是私人微信 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 { 
    Supplement 5    Jul 10, 2017

    第四附言 忘 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 { 
    Supplement 6    Jul 10, 2017
     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"; } } } 
    29 replies    2017-07-24 18:08:04 +08:00
    wenzhoou
        1
    wenzhoou  
       Jul 10, 2017 via Android
    B 的锅。post 时候 timeout 和 retry 必须要想到。不然多少的连接池也架不住。
    不过如果业务上能变成异步处理,那就最好了。
    连接数是 tps x 平均响应时间吧。峰值连接数就是 峰值 tps x 峰值响应时间啦。你这峰值响应时间趋于无穷大怎么搞。
    ovear
        2
    ovear  
       Jul 10, 2017 via Android   2
    请换简体中文
    sagaxu
        3
    sagaxu  
       Jul 10, 2017 via Android
    A 完成的时候就该释放连接了
    Sauryer
        4
    Sauryer  
       Jul 10, 2017 via iPhone
    程式?楼主是台湾人?
    xmh51
        5
    xmh51  
       Jul 10, 2017
    利用 java FutureTask 类 强制设定超时时间 过了 多少秒 如果拿不到结果,就进行异常处理。
    jalena
        6
    jalena  
       Jul 10, 2017
    不贴点代码是最可恶的提问,那么,为啥子不捕获超时这个异常呢?或者设定超时呢~??
    shiltian
        7
    shiltian  
       Jul 10, 2017 via iPhone
    @ovear 楼主是台湾人…不是大陆人用繁体字…
    ovear
        8
    ovear  
       Jul 10, 2017
    @tianshilei1992 问题是我看了半天也没看懂。。
    a b c 代表的到底是操作,还是不同的服务
    vingz
        9
    vingz  
       Jul 10, 2017
    A 和 B 应该是异步隔离,A 操作完成后,把数据发给 B 去处理,A 释放数库连接;
    B 收到数据后发 post 请求,设置 socket 的读写超时时间,这样一直没有 response 的时候 B 会报错。
    A 和 B 要是多线程,线程之间可以通过消息通信。
    v2orz
        10
    v2orz  
       Jul 10, 2017
    发送 post 的 httpClient 或者别的什么,设置合理的超时时间
    顺便,A 操作获取到结果后,数据库连接就应该已经还给连接池了
    teemoer
        11
    teemoer  
    OP
       Jul 10, 2017
    @wayne1943 不是 了
    teemoer
        12
    teemoer  
    OP
       Jul 10, 2017
    @wenzhoou 打算 按照 5 的 使用超出常,感
    teemoer
        13
    teemoer  
    OP
       Jul 10, 2017
    @vingc723
    @v2orz

    A 操作 用的 springDataJpa 不知道什 明明查完 就是不放接池 ,我在上 上了 代


    @sagaxu
    @ovear
    @jalena
    letitbesqzr
        14
    letitbesqzr  
       Jul 10, 2017
    手动管理事务
    teemoer
        17
    teemoer  
    OP
       Jul 10, 2017
    @letitbesqzr 其自然洋 XD = = 洋哥好
    teemoer
        18
    teemoer  
    OP
       Jul 10, 2017
    @hcymk2 感 我上去看看
    zacard
        19
    zacard  
       Jul 10, 2017
    这里面问题非常多。。。。
    有个原则:调用外部资源都应该设置超时!
    letitbesqzr
        20
    letitbesqzr  
       Jul 10, 2017
    看莪焱看
    letitbesqzr
        21
    letitbesqzr  
       Jul 10, 2017
    ㄣ`怼我绝情,蹴怪我怼情~
    letitbesqzr
        22
    letitbesqzr  
       Jul 10, 2017
    ┈┾分,是莪蕞的悲哀 ̄*
    LavenderLee
        23
    LavenderLee  
       Jul 10, 2017   1
    ヤ我鞍锝走掉,яáδρì
    DonaidTrump
        24
    DonaidTrump  
       Jul 10, 2017 via iPhone
    @wayne1943 我感觉是假台湾人,台湾不是叫伺服器嘛
    shiltian
        25
    shiltian  
       Jul 10, 2017 via iPhone
    @ovear 下面被光速打脸并不是台湾人 哈哈
    roooz
        26
    roooz  
       Jul 10, 2017
    这坛子灌水的是越来越多了
    teemoer
        27
    teemoer  
    OP
       Jul 11, 2017 via iPhone
    @roooz 何来灌水一说
    EXE
        28
    EXE  
       Jul 12, 2017
    这么喜欢用繁体,注释为啥不用
    shuangmu
        29
    shuangmu  
       Jul 24, 2017
    繁体看的我眼睛累
    About     Help     Advertise     Blog     API     FAQ     Solana     5642 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 91ms UTC 08:27 PVG 16:27 LAX 01:27 JFK 04:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86