axis2耗时问题,定时任务注入问题

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

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


2.定时任务问题

遇到 的现象:定时任务开启,service被@autoware后无法注入
症状:由于service无法手动注入 无法通过new的方式所以会报空指针异常
解决办法:
a.通过spring.xml中的自动扫描指向到该文件夹下,失败 service还是无法自动注入
b.可以通过白盒测试法 拿到该service javabean非注解方式,虽然当时并没有这样操作但理论上可行
  <pre name="code" class="html">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<MobileDepartmentTotal> 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();
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值