Spring task定时任务执行一段时间后莫名其妙停止的问题
原因:定时任务请求超时,没有设置请求超时时间
package cn.bsoft.CommonUtil.util; import java.util.HashMap; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import sun.util.logging.resources.logging; public class WSClientUtil { private static final Logger log = LoggerFactory.getLogger(WSClientUtil.class); /** * web-service工具类 * @param wsdlURL web-service请求地址 * @param operationName web-service操作名称 * @param params 请求参数 * @return 请求数据JSON字符串 */ public static String invokeWs(String wsdlURL, String operationName, Object... params) { JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient(wsdlURL); HTTPConduit conduit = (HTTPConduit)client.getConduit(); HTTPClientPolicy policy = new HTTPClientPolicy(); policy.setConnectionTimeout(100000);//设置超时时间 policy.setReceiveTimeout(100000);//设置超时时间 policy.setConnectionRequestTimeout(100000); conduit.setClient(policy); Object[] objects; try { log.info("请求社康通后台 operation-name:" + operationName); log.info("请求社康通后台 入参:" + JSON.toJSONString(params)); objects = client.invoke(operationName, params); log.info("请求社康通后台 :反参" + JSON.toJSONString(objects)); } catch (Exception e) { // 调用社康通后台发生异常 HashMap<String, String> res = new HashMap<String, String>(); res.put("ResultCode", "-1"); res.put("ResultDesc", e.getMessage()); e.printStackTrace(); return JSONObject.toJSONString(res); } return parseEsb(objects[0].toString()); } /** * 解析web-service返回值 * @param esbResult web-service返回值 * @return XML中的数据JSON字符串 */ public static String parseEsb(String esbResult) { Document doc = null; try { doc = DocumentHelper.parseText(esbResult); } catch (Exception e) { if (esbResult.startsWith("\"") && esbResult.endsWith("\"")) { esbResult = esbResult.substring(1, esbResult.length() - 1); esbResult = esbResult.replace("\\\"", "\""); } try { // 判断是否是JSON格式,如果是直接返回结果 JSON.parseObject(esbResult); return esbResult; } catch (Exception e2) { } e.printStackTrace(); } Element root = doc.getRootElement(); String code = root.elementText("code"); String response = root.elementText("response"); if (!"200".equals(code)) { // String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); // String msg = "ESB总线调用出错: method=" + methodName + ", code=" + code + ",response=" + response; HashMap<String, String> res = new HashMap<String, String>(); res.put("ResultCode", code); res.put("ResultDesc", response); return JSONObject.toJSONString(res); } else { if (response.startsWith("\"") && response.endsWith("\"")) { response = response.substring(1, response.length() - 1); response = response.replace("\\\"", "\""); } return response; } } /** * 调用webservice接口, 返回参数为: xml中response为xml格式 * @param wsdlURL web-service请求地址 * @param operationName web-service操作名称 * @param params 请求参数 * @return 请求数据JSON字符串 */ public static String invokeWsXml(String wsdlURL, String operationName, Object... params) { String callurl = wsdlURL; if (callurl.indexOf("?wsdl") < 0) { callurl = callurl + "?wsdl"; } JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient(callurl); HTTPConduit conduit = (HTTPConduit) client.getConduit(); HTTPClientPolicy policy = new HTTPClientPolicy(); //设置超时时间 policy.setConnectionTimeout(30000); policy.setReceiveTimeout(30000); conduit.setClient(policy); Object[] objects; if (null == params) { String msg = "请求参数为空"; //为了兼容之前的方法, 这里返回null return null; } try { log.info("请求社康通后台 " + operationName + "入参:" + JSON.toJSONString(params)); objects = client.invoke(operationName, params); log.info("请求社康通后台 " + operationName + " 反参:" + JSON.toJSONString(objects)); } catch (Exception e) { e.printStackTrace(); //为了兼容之前的方法, 这里返回null return null; } return XmlUtils.xmlToJson(objects[0].toString(), "utf-8"); } public static void main(String[] args) { // Object[] params = new Object[4]; // params[0] = "440308"; // params[1] = "px034"; // params[2] = "loginDoctor"; // params[3] = "{'username':'0800146','password':'04b75670c3cff2d71fced3a80fcab15e'}"; // try { // String res = invokeWs("http://218.18.233.229:8084/esbcs/WebServiceEntry?wsdl", "invoke", params); // } catch (Exception e) { // e.printStackTrace(); // } String areaCode = "100000"; String function = "px017"; String method = "BP003"; StringBuilder jsonData = new StringBuilder(); jsonData.append("<request><MsgBody><ListSize>1</ListSize><InputList><Input><BPLOG>"); jsonData.append("<EMPIID></EMPIID>"); jsonData.append("<IDCARD>51152819930821241X</IDCARD>"); jsonData.append("<BPITEM>1</BPITEM>"); jsonData.append("<SOURCE>1</SOURCE>"); jsonData.append("<PONINT>1</PONINT>"); jsonData.append("<LASTMODIFYUNIT>440308001002</LASTMODIFYUNIT>"); jsonData.append("<LASTMODIFYUSER>0800146</LASTMODIFYUSER>"); jsonData.append("<LASTMODIFYDATE>2020-08-27 09:59:10</LASTMODIFYDATE>"); jsonData.append(("</BPLOG></Input></InputList></MsgBody></request>")); String invoke = invokeWsXml("http://218.18.233.229:8084/esb/WebServiceEntry?wsdl", "invoke", areaCode, function, method, jsonData.toString()); System.out.println(invoke); } }
:
https://www.cnblogs.com/zj0208/p/7018098.html
好记性不如烂笔头
浙公网安备 33010602011771号