前段時(shí)間做了一個(gè)空氣質(zhì)量定時(shí)更新的功能,發(fā)現(xiàn)運(yùn)行一天后定時(shí)任務(wù)停止,后臺不報(bào)錯(cuò)
貼出webservice代碼
public class DustServiceClient {
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
public Object fetchRealTimeData(String id){
Client client = clientFactory.createClient(wsdl);
Client client = tlClient.get();
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(5000);
httpClientPolicy.setReceiveTimeout(5000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
String username = "username";
String password = "password";
List<Interceptor<? extends Message>> list = client.getOutInterceptors();
Interceptor<? extends Message> in = new AddUserInterceptor(username, password);
list.add(in);
list.add(new LoggingOutInterceptor());
try {
Object[] result = client.invoke("fetchRealTimeData", id);
return result[0];
} catch (Exception e) {
e.printStackTrace();
return ResultBean.PARAM_ERR;
}
}
}
后臺設(shè)置一分鐘執(zhí)行一次更新
@Scheduled(fixedRate=5*60000)
每次大概有一百多次的webservice調(diào)用,執(zhí)行一天后基本就停止了,后臺也沒有錯(cuò)誤,查了好多原因后才發(fā)現(xiàn)原來Client在用完后還需要銷毀
public class DustServiceClient {
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
private static ThreadLocal<Client> tlClient = new ThreadLocal<Client>();
public void initClient() {
tlClient.set(clientFactory.createClient(wsdl);
Client client = tlClient.get();
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(5000);
httpClientPolicy.setReceiveTimeout(5000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
String username = "username";
String password = "password";
List<Interceptor<? extends Message>> list = client.getOutInterceptors();
Interceptor<? extends Message> in = new AddUserInterceptor(username, password);
list.add(in);
list.add(new LoggingOutInterceptor());
}
public void destory() {
tlClient.get().destroy();
}
public Object fetchRealTimeData(String id){
try {
Object[] result = tlClient.get().invoke("fetchRealTimeData", id);
return result[0];
} catch (Exception e) {
e.printStackTrace();
return ResultBean.PARAM_ERR;
}
}
}
沒有深入了解下destory()方法的作用,請大佬們指教!