博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
axis2耗时问题,定时任务注入问题
阅读量:2445 次
发布时间:2019-05-10

本文共 2119 字,大约阅读时间需要 7 分钟。

1.  axis2 webservice 主线程不允许执行耗时操作

遇到的现象:暴露的接口需要处理与另外的一个接口进行交互100余次
症状:通过自己的接口调用另外一台主机的接口,前两次能获取值 往后都连接超时
解决办法:
a.在接口方法中我通过main方法调取外一台主机接口不会发生任何超时,排除了对方接口处理数据效率问题,问题属性我方接口
b.我把另一项目中的axis2.xml整个替换,并没有发现限制三次连接问题
c.通过排查排除拦截机制问题
d.我在接口中开启一个新线程用来接口交互发现问题完美解决。得出理论 即:
调用我方接口,接口开启一个主线程 然而主线程并不能进行耗时操作,这个有点类似于安卓的handler机制,由于线程机制特殊性,即主线程执行结束 新建线程没执行完成会继续执行下去 并不与主线程产生依赖关系。

2.定时任务问题

遇到 的现象:定时任务开启,service被@autoware后无法注入
症状:由于service无法手动注入 无法通过new的方式所以会报空指针异常
解决办法:
a.通过spring.xml中的自动扫描指向到该文件夹下,失败 service还是无法自动注入
b.可以通过白盒测试法 拿到该service javabean非注解方式,虽然当时并没有这样操作但理论上可行
import org.junit.Before;  import org.junit.Test;  import org.springframework.context.ApplicationContext;  import org.springframework.context.support.FileSystemXmlApplicationContext;  private ApplicationContext applicationContext;  @Before      public void setUp() throws Exception {          applicationContext = new FileSystemXmlApplicationContext("classpath:spring/applicationContext.xml");      }  @Test      public void testSelectBySelective() {          MobileDepartmentTotalService mobileDepartmentTotalService = (MobileDepartmentTotalService)applicationContext.getBean("mobileDepartmentTotalService");          //MobileDepartmentTotal mobileDepartmentTotal = new MobileDepartmentTotal();          List
list = mobileDepartmentTotalService.selectBySelective(null); System.out.println(list.size()); }
 
c.我把放在定时任务中的整个业务逻辑放入接口中通过httpClient方式调用,这是我当时脑海中第一想到能100%解决的办法,代码如下
HttpClient httpClient = new HttpClient();		GetMethod getMethod = new GetMethod(url);		getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());		try {			httpClient.executeMethod(getMethod);			ByteArrayOutputStream out = new ByteArrayOutputStream();			InputStream in = getMethod.getResponseBodyAsStream();			int len = 0;			byte[] buf = new byte[1024];			while((len=in.read(buf))!=-1){				out.write(buf, 0, len);			}			responseMsg = out.toString("UTF-8");		} catch (HttpException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		} finally {			//释放连接			getMethod.releaseConnection();		}

转载地址:http://alaqb.baihongyu.com/

你可能感兴趣的文章
koa express_Koa简介-Express的未来
查看>>
github请求超时_在GitHub中创建第一个请求请求
查看>>
JavaScript函数式编程介绍:使用map(),filter()和reduce()进行列表处理
查看>>
构建自定义JavaScript Scrollspy导航
查看>>
laravel/dusk_Laravel Dusk简介
查看>>
slim3框架 教程_SLIM 3入门,PHP微框架
查看>>
谷歌中阻止冒泡在火狐中失效_如何在Google表格中转换货币
查看>>
wps表格日期计算天数_如何计算Google表格中两个日期之间的天数
查看>>
如何使Linux控制台更易于Linux新手使用
查看>>
谷歌浏览器开发文档获取书签_使用书签更快地浏览Word文档
查看>>
如何在Apple Watch上启用和使用缩放
查看>>
初学者:如何在Outlook 2010中向其他人分配任务
查看>>
windows 10 修复_如何修复Windows的10大烦恼
查看>>
系统映像恢复 进不了系统_如何从Windows系统映像中恢复特定文件
查看>>
如何学习Photoshop的极客指南,第2部分:面板
查看>>
如何在iPhone上将实时照片转换为视频或GIF
查看>>
xbmc_从iPhone或iPod Touch控制XBMC
查看>>
编程爱好者网站_读书爱好者的最佳免费网站
查看>>
为什么运行微波会杀死Wi-Fi连接?
查看>>
matlab生成文本乱码_如何生成完全随机/乱码文本的段落
查看>>