我的项目是尝试使用aws-java-sdk-1.11.15将文件上传到Amazon S3.我正在使用ant在CLI上构建我的项目.我使用的杰克逊版本是2.8.0.我正在将我的lib文件夹添加到我的类路径中.我的所有jar文件都在我的lib文件夹中.我在运行代码时得到以下信息 -
Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.enable([Lcom/fasterx
ml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/databind/ObjectMapper;
at com.amazonaws.partitions.PartitionsLoader.(PartitionsLoader.java:54)
at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:66)
at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:54)
at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:107)
at com.amazonaws.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3256)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3952)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1538)
at code4goal.antony.resumeparser.ResumeParserProgram.main(ResumeParserProgram.java:613)
Run Code Online (Sandbox Code Playgroud)
对于这段代码 -
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
try
{
File file = new File(uploadFileName);
s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
}
Run Code Online (Sandbox Code Playgroud)
错误发生在s3client.putObject(new PutObjectRequest(bucketName,keyName,file));
我有一个运行我的服务的自定义AMI。使用AWS Java SDK,我使用RunInstancesRequestAMI 创建EC2实例。现在,在开始使用服务之前,必须确保新创建的实例已启动并正在运行。我使用以下方法轮询实例:
var transitionCompleted = false
while (!transitionCompleted) {
val currentState = instance.getState.getName
if (currentState == desiredState) {
transitionCompleted = true
}
if(!transitionCompleted) {
try {
Thread.sleep(TRANSITION_INTERVAL)
} catch {
case e: InterruptedException => e.printStackTrace()
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当currentState实例的变成desiredState(是running)时,我得到实例已准备就绪的状态。但是,任何新创建的实例尽管处于running状态,但仍在初始化中,因此无法立即使用。
如何确保仅在能够访问实例及其服务时才返回?是否要进行任何特定的状态检查?
PS:我使用Scala
我的目标是:
AWS java SDK 不允许推送输出流。因此,我必须将outputstream步骤2转换为inputstream. 为此我决定使用PipedInputStream.
但是,我的代码只是挂在该writeTo(out);步骤中。此代码位于 Grails 应用程序中。当代码挂起时CPU不是处于高消耗状态:
import org.apache.commons.imaging.formats.jpeg.xmp.JpegXmpRewriter;
AmazonS3Client client = nfile.getS3Client() //get S3 client
S3Object object1 = client.getObject(
new GetObjectRequest("test-bucket", "myfile.jpg")) //get the object.
InputStream isNew1 = object1.getObjectContent(); //create input stream
ByteArrayOutputStream os = new ByteArrayOutputStream();
PipedInputStream inpipe = new PipedInputStream();
final PipedOutputStream out = new PipedOutputStream(inpipe);
try {
String xmpXml = "<x:xmpmeta>" +
"\n<Lifeshare>" +
"\n\t<Date>"+"some date"+"</Date>" +
"\n</Lifeshare>" +
"\n</x:xmpmeta>";/
JpegXmpRewriter …Run Code Online (Sandbox Code Playgroud) 每当我使用AWS Java SDK时,都会被疯狂的日志轰炸,因为它被设置为调试状态,而我无法保持其正常运行。
以下是带有-Dlog4j.debug标志的输出结果。
它表明我的log4j.properties文件已被读取和解析。使用root logger OFF和com.amazonawsat,WARN但我仍然看到调试级别的日志记录。我想念什么吗?
log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@42a57993.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@42a57993 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@42a57993.
log4j: Using URL [jar:file:/p-test/target/scala-2.11/phoenix-test-assembly-81fc4750d1.jar!/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL jar:file:/p-test/target/scala-2.11/phoenix-test-assembly-81fc4750d1.jar!/log4j.properties
log4j: Parsing for [root] with value=[OFF].
log4j: Level token is [OFF].
log4j: Category root set to OFF
log4j: …Run Code Online (Sandbox Code Playgroud) 在我的系统上安装Java 11之后,运行时继续为1.8
安装的Java版本:
JAVA_HOME env变量值: C:\Program Files\Java\jdk-11.0.3
在运行命令提示符的命令提示符java -version下,期望看到Java 11信息,但我看到了Java 8。
更改环境变量值不会更改结果,重新启动似乎没有任何作用。
C:\Users\user>java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) Client VM (build 25.211-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
应该是显示Java 11运行时信息
我AmazonDynamoDBClient使用以下方法创建了一个标准AmazonDynamoDBClientBuilder:
AmazonDynamoDBClient client = AmazonDynamoDBClientBuilder.standard().build();
Run Code Online (Sandbox Code Playgroud)
在AmazonDynamoDBClient 的文档中,它提到:
ProvisionedThroughputExceededException- 您的请求率太高。适用于 DynamoDB 的 AWS 开发工具包会自动重试收到此异常的请求。您的请求最终会成功,除非您的重试队列太大而无法完成。减少请求频率并使用指数退避。
当重试由于 原因而失败的请求时,标准客户端是否默认使用指数退避ProvisionedThroughputExceededException?或者这是我需要手动配置的东西?
大家好,我在 Spring Boot 应用程序中创建了一个全局异常处理程序,并在下面的代码中写入了 AWS cloudwatch 中发生的异常,工作正常我能够在 cloudwatch 中写入异常,但挑战是我无法获取 Restcontroller 名称和服务路径从发生特定异常的地方。
示例 Java 服务
@GetMapping(value = "DynamoDb/deleteTable")
public String deleteTable(@RequestParam String TableName) throws InterruptedException {
Table table = dynamoDB.getTable(TableName);
try {
table.delete();
table.waitForDelete();
} catch (Exception e) {
throw e;
}
return "Success";
}
Run Code Online (Sandbox Code Playgroud)
当发生异常时,它将控制权转移到controlleradvice全局异常处理程序
这是我的代码
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cloudwatchlogs.CloudWatchLogsClient;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsRequest;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsResponse;
import software.amazon.awssdk.services.cloudwatchlogs.model.InputLogEvent;
import software.amazon.awssdk.services.cloudwatchlogs.model.PutLogEventsRequest;
import java.util.Arrays;
@ControllerAdvice
public class ExceptionControllerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> exceptionHandler(Exception ex) {
ErrorResponse …Run Code Online (Sandbox Code Playgroud) 我正在使用 Java Sdk 创建胶水作业。它只有两个必需的参数 Command 和 Glue 版本。但我需要通过自动脚本生成来创建工作。正如我们可以从控制台执行的那样,我们添加数据源、AWS Glue 生成的建议脚本、转换类型、数据目标、架构等。如何使用 java sdk 或什至使用 awsglue api 将这些参数添加到胶水作业中。
CreateJobRequest req = new CreateJobRequest();
req.setName("TestJob2");
req.setRole("GlueS3Role");
req.setGlueVersion("1.0");
JobCommand command = new JobCommand();
command.setName("glueetl");
command.setPythonVersion("3");
**// S3 location need not to be given, as script code is auto generated by AWS glue
command.setScriptLocation(S3ScriptLocation);**
req.setCommand(command);
AWSGlue glueClient = AWSGlueClientBuilder.standard()
.withRegion(Regions.US_EAST_1)
.withCredentials(new AWSStaticCredentialsProvider(creds))
.build();
glueClient.createJob(req);
}
Run Code Online (Sandbox Code Playgroud) 我尝试在嵌套对象中使用 DynamoDB 注释,如下所示:
@DynamoDBTable(tableName=xyz)
class entity1{
@DynamoDBAttribute
@DynamoDBTypeConvertedJson
private List<UserAction> userActions;
}
class UserAction{
@DynamoDBAutoGeneratedKey
private String actionId;
@DynamoDBAttribute
@DynamoDBAutoGeneratedTimestamp(strategy = DynamoDBAutoGenerateStrategy.CREATE)
private Long createdTime;
}
Run Code Online (Sandbox Code Playgroud)
我没有看到上述属性是在 UserAction 类中自动生成的。我想知道嵌套对象是否支持这些注释用法。请建议。
我正在尝试访问存储在 s3 存储桶中的 pdf 。我有存储桶名称和 arn。经过大量示例后,我不明白两种服务 S3Client 和 AmazonS3 之间的区别。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(Region.US_EAST_1)
.withCredentials(new ProfileCredentialsProvider())
.build();
S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).build();
Run Code Online (Sandbox Code Playgroud)
不知道该用什么?
aws-java-sdk ×10
java ×4
amazon-s3 ×2
aws-sdk ×2
amazon-ec2 ×1
ant ×1
aws-cloudwatch-log-insights ×1
aws-glue ×1
exception ×1
groovy ×1
inputstream ×1
jackson ×1
log4j ×1
scala ×1
spring-boot ×1