赞
踩
目录
标题胡乱起的
腾讯cos公司很多项目都在用,新项目基本都是拷贝老代码,一直相安无事.突然一天,工程师小李新建了一个项目,拷贝了老项目cos的代码,so happy,自测也正常
项目开发完成,小李交付测试人员测试,测试人员发现首次上传正常,但是之后就一直报错,小李瞅了半天,查了许多资料,也没找到原因
后来小李去找公司小王
小王看了一下代码,代码如下(稍微改造,简化了代码):
// 指定要上传的文件
File localFile = new File("C:\\Users\\oe_wangwenzhe\\Desktop\\tmp\\1.pdf");
// 指定文件将要存放的存储桶
String bucketName = "gongju-1259318993";
// 指定文件上传到 COS 上的路径,即对象键。例如对象键为folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
String key = System.currentTimeMillis()+"";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
System.out.println(putObjectRequest.getCustomRequestHeaders());
// 正常上传
PutObjectResult putObjectResultSuccess = cosClient.putObject(putObjectRequest);
cosClient.shutdown();
// 关闭后,上传失败
PutObjectResult putObjectResultFail = cosClient.putObject(putObjectRequest);
点进源码:
public void run() {
while(true) {
try {
if (!this.shutdown) {
synchronized(this) {
this.wait(2000L);
this.connMgr.closeExpiredConnections();
this.connMgr.closeIdleConnections((long)this.idleAliveMS, TimeUnit.MILLISECONDS);
continue;
}
}
} catch (InterruptedException var8) {
log.error("interrupt exception occured:", var8);
} finally {
this.connMgr.shutdown();
}
return;
}
}
发现原因是: cosClient.shutdown();最终会调用:this.connMgr.shutdown();
这很好理解,关闭了之后就报错,问题是之前项目也是这样写的,之前的项目就好好
我直接拷贝的之前的项目代码,之前的项目跑的好好的,小李小声嘟囔着
小王看了一下之前项目,确实情况和小李说的一样
小王又运行了一下之前的项目,发现之前的项目上传文件到存储桶确实是正常的,上传100次都正常
这真奇怪,大牛小王一时也没发现问题在哪里
无意间小王点了一下老项目的shutdown,发现了问题,原来原来项目的shutdown和现在的有点不一样,老项目shutdown长这样子:
public void run() { try { while (!shutdown) { synchronized (this) { wait(MONITOR_INTERVAL_MS); // 关闭无效的连接 connMgr.closeExpiredConnections(); // 关闭空闲时间超过IDLE_ALIVE_MS的连接 connMgr.closeIdleConnections(IDLE_ALIVE_MS, TimeUnit.MILLISECONDS); } } } catch (InterruptedException e) { } }
少了几行代码,缺少了this.connMgr.shutdown();
终于问题找到了:老项目并没有关闭链接,而新项目关闭了链接
那为什么老项目没有关闭,新项目关闭了链接
估计是版本问题
对比了一下版本,确实是版本差异
老项目引入的cos sdk:
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.24</version> </dependency>
新项目引入的cos sdk:
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.84</version> </dependency>
解决方案1:
不shutdown
解决方案2:
降低sdk版本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。