use*_*545 6 java amazon-s3 amazon-web-services
看起来没有关于如何做到这一点的好来源,我找到的信息的两个地方如下:
第一个链接。这看起来是最新的版本。但是,software.amazon.awssdk.http.apache.ApacheHttpClient即使我有依赖项,我也无法在我的项目中找到任何地方。
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-sdk-java</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<artifactId>aws-http-client-apache</artifactId>
<groupId>software.amazon.awssdk</groupId>
<version>2.0.0-preview-1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在第二个链接看起来要提供关于如何配置客户端版本已过时。示例中的以下代码看起来无效:
DynamoDBClient client =
DynamoDBClient.builder()
.httpConfiguration(ClientHttpConfiguration.builder()
.httpClientFactory(apacheClientFactory)
.build())
.build();
Run Code Online (Sandbox Code Playgroud)
ClientHttpConfiguration 不可用且 httpConfiguration 方法在客户端上不可用。
试图一起破解一些东西给了我以下代码:
ProxyConfiguration proxyConfiguration = ProxyConfiguration.builder().endpoint(URI.create("host:port")).username("usr").password("pwd").build();
SdkHttpClient apacheClientFactory =
ApacheSdkHttpClientFactory.builder()
.socketTimeout(Duration.ofSeconds(10))
.connectionTimeout(Duration.ofMillis(750))
.proxyConfiguration(proxyConfiguration).build().createHttpClient();
this.s3client = S3Client.builder().httpClient(apacheClientFactory).build();
Run Code Online (Sandbox Code Playgroud)
这可以编译,但我遇到了很多java.lang.ClassNotFoundException: software.amazon.awssdk.http.ExecutableHttpRequest异常,我不明白它们来自哪里或如何修复。
所以我的问题是
2.3.2为 AWS Java SDK v2 版本设置代理的正确方法是什么 ,为什么我的实现不起作用?
当我添加以下依赖项时,我收到另一个错误:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
<version>2.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
错误:
Caused by: java.lang.ClassNotFoundException: software.amazon.awssdk.http.SdkHttpClient$Builder
Run Code Online (Sandbox Code Playgroud)
小智 7
要从代理防火墙后面的本地系统针对 dynamoDB 运行 Junit 测试,请使用以下代码片段。我使用了 java 8、aws sdk 2x、dynamodb 2.15.x、Maven 4.x 和 IntelliJ 2020.3。
private DynamoDbClient createDynamoDbClient() {
SdkHttpClient apacheClient = ApacheHttpClient.builder()
.socketTimeout(Duration.ofSeconds(20))
.connectionTimeout(Duration.ofSeconds(5))
.proxyConfiguration(ProxyConfiguration.builder()
.useSystemPropertyValues(false)
.endpoint(URI.create("http://<proxyip>:<port>"))
.username("<userId>")
.password("<pwd>")
.build())
.build();
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.httpClient(apacheClient)
.credentialsProvider(ProfileCredentialsProvider.builder()
.profileName("default")
.build())
.build();
return dynamoDbClient;
}
Run Code Online (Sandbox Code Playgroud)
您似乎引入了适用于 Java 的 AWS 开发工具包的多个版本。尝试使用“物料清单使用进口范围,像这样” BOM方法:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.5.60</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
定义好之后,带上你想要的特定部分:
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>iam</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
您无需指定版本,因为 BOM 涵盖了这些版本。正确设置依赖项后,您可以执行以下操作:
final SdkHttpClient httpClient = ApacheHttpClient.builder()
.proxyConfiguration(ProxyConfiguration.builder()
.useSystemPropertyValues(true)
.build())
.build();
this.s3client = S3Client.builder().httpClient(httpClient).build();
Run Code Online (Sandbox Code Playgroud)
我正在使用 useSystemPropertyValues 以便为了方便起见,它会选择标准系统属性来设置代理值。所有这些都对我们有用,并且代理被正确使用。
| 归档时间: |
|
| 查看次数: |
4838 次 |
| 最近记录: |