我正在使用AmazonJavaSDK(截至本文撰写时,最新版本为1.11.147)和Groovy(Groovy版本: 2.4.11 JVM: 1.8。0_112供应商:甲骨文公司操作系统:苹果操作系统X)将文件上传到S3。使用亚马逊的传输管理器留档说明,我能够将内容从一个存储桶复制到另一个存储桶。但是,上传总是失败。我尝试了以下3种方法。我让葡萄抓取了httpclient和httpcore的新版本,因为我在这个堆栈溢出后看到的Apache PoolingHttpClientConnectionManager抛出非法状态异常
@Grapes([
@Grab(group='com.amazonaws', module='aws-java-sdk', version='1.11.147'),
// https://mvnrepository.com/artifact/org.apache.commons/commons-compress
@Grab(group='org.apache.commons', module='commons-compress', version='1.13'),
// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
@Grab(group='org.apache.httpcomponents', module='httpclient', version='4.5.3'),
// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore
@Grab(group='org.apache.httpcomponents', module='httpcore', version='4.4.6')
])
// creds is String saying which ~/.aws/credentials profile to use
def credentials = new ProfileCredentialsProvider(creds)
def s3client = AmazonS3ClientBuilder.standard().
withCredentials(credentials).
withRegion(region).
build()
def tx = TransferManagerBuilder.standard().
withS3Client(s3client).
build()
def config_path = "/path/to/my/root"
def dir = "key_path"
def f = new File("${config_path}/${dir}/")
// Method 1, upload whole directory in one call
def mfu = tx.uploadDirectory(data_bucket, dir, f, true)
mfu.waitForCompletion() // <-- throws exception, w/o this line, just doesn't upload, but script continues
// Method 2, upload each file separately
def ld
ld = { File file ->
file.listFiles().each { g ->
if (g.isDirectory()) {
ld.call(g)
} else {
def key = g.toString().substring(config_path_length)
def fu = tx.upload(data_bucket, key, g)
def fu = tx.upload(data_bucket, key, g)
fu.waitForCompletion() // <-- throws exception, w/o this line, just doesn't upload, but script continues
}
}
}
ld.call(f)
// Finally Method 3, avoiding TransferManager altogether, and call putObject directly on each file
def ld
ld = { File file ->
file.listFiles().each { g ->
if (g.isDirectory()) {
ld.call(g)
} else {
def key = g.toString().substring(config_path_length)
def fu = tx.upload(data_bucket, key, g)
s3client.putObject(new PutObjectRequest(data_bucket, key, g)) // <-- throws exception
}
}
}
ld.call(f)
然而,无论我尝试哪种方法,我都会得到以下stacktrace:
捕获:xec.executeIllegalStateException:连接池关闭xec.java:184IllegalStateException:连接池关闭在org.apache.http.impl.client.lient.do(lient.java:184)在org.apache.http.impl.client.AbstractConnPlient.execute(AbstractConnPlient.java:82)在org.apache.http.impl.conn.PoolingHttpClientConnectionManager.request连接(PoolingHttpClientConnectionManager.java:251)在com.amazonaws.http.apache.client.impl.ClientConnectionManagerFactory$Hlient.execute(ClientConnectionManagerFactory.java:76)在org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:175)在org.apache.http.impl.execchain.协议java.lang.(协议java.lang.)在org.apache.http.util.InternalHttpCsserts.check执行(InternalHttpCsserts.java:34)在org.apache.http.pool.CloseableHttpCool.lease(CloseableHttpCool.java:184)在com.amazonaws.http.conn.SdkHttpCandler.invoke(SdkHttpClient. java: 72)在com. amazonaws. http。Amazon HttpClient$亚马逊3Client. invoke(亚马逊3Client. java: 4221)在com. amazonaws. services. s3。亚马逊3Client. invoke(亚马逊3Client. java: 4168)在com. amazonaws. services. s3。亚马逊3Client. putObject(亚马逊3Client. java: 1718)在com. amazonaws. services. s3。亚马逊3$putObject. call(未知来源)...
我目前无法确认groovy是否正在使用更新的httpcomponent库,或者这是否是问题所在。安装在1.8 JDK中的是httpclient_4.2.6和httpclient_4.3.5。任何关于如何摆脱困境的建议都将不胜感激。谢谢你-文森特
我想出来了。s3client在代码的其他地方附加了另一个TransferManager。当调用tx.shutdownNow()时,它也关闭了这个TransferManager。
问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager
当我使用CloseableHttpClient和do Execute方法时,它在第一次正常工作,但之后从未成功。它将引发表示“连接池关闭”的异常 有人说是因为我还没有关闭客户端有人说是httpClient 4.3中的bug 我的项目不存在上述问题,但仍然无法正常工作
我正在Java中运行Apache HTTP POST请求,每当我超过1300个请求时,就会出现以下错误,我需要发出更多的请求,大约40k,我可以做些什么来纠正相同的错误?
我正在使用HttpClient v4.5.5 我有一个如下: 然后我使用超文本传输协议客户端如下: 通过定期调用(每隔几分钟) 偶尔我会出错 ,据我所知,这种情况要么发生在旧的HttpClient版本上,要么发生在您关闭HttpClient时。我没有这样做。所以我不明白为什么会出现这个错误。它会恢复,但有这样的异常是个问题。
我有一个带有数据库连接池的grails/groovy web应用程序。设置如下所示: 我使用java melody进行诊断和监控,并注意到一些奇怪的行为。例如,当执行查询数据库的作业时,连接可以超越maxActive属性。为什么这是可能的? 我需要显式关闭Grails连接吗?该作业调用一个服务方法,该方法通过withCriteria Grails调用简单地执行DB查询,如: 似乎每次运行这个程序,