Java 中带有 data-api 库的 AuroraRDS Serverless 不工作
AuroraRDS Serverless with data-api library in Java does not work
我想通过 AWS 从 2020 年初开始提供的 data-api 访问数据库。
这是我的 Maven 代码(仅显示 aws 依赖项):
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.790</version>
</dependency>
<dependency>
<groupId>software.amazon.rdsdata</groupId>
<artifactId>rds-data-api-client-library-java</artifactId>
<version>1.0.4</version>
</dependency>
这是我的Java代码
public class Opstarten {
public static final String RESOURCE_ARN = "arn:aws:rds:eu-central <number - name >";
public static final String SECRET_ARN = "arn:aws:secretsmanager:eu-central-1:<secret>";
public static final String DATABASE = "dbmulesoft";
public static void main(String[] args) {
// TODO Auto-generated method stub
new Opstarten().testme();
}
public void testme( ) {
var account1 = new Account(1, "John"); //plain POJO conform AWS manual hello world example
var account2 = new Account(2, "Mary");
RdsDataClient client = RdsDataClient.builder().database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN).build();
client.forSql("INSERT INTO accounts(accountId, name) VALUES(:accountId, :name)").
withParameter(account1).withParameter(account2).execute();
}
}
我遇到的错误:
线程“main”中的异常 java.lang.NullPointerException
在 com.amazon.rdsdata.client.RdsDataClient.executeStatement(RdsDataClient.java:134)
在 com.amazon.rdsdata.client.Executor.executeAsSingle(Executor.java:92)
在 com.amazon.rdsdata.client.Executor.execute(Executor.java:77)
在 nl.bpittens.aws.rds.worker.Opstarten.testme(Opstarten.java:47)
在 nl.bpittens.aws.rds.worker.Opstarten.main(Opstarten.java:29)
当我调试它时,我看到客户端对象为空,但 rdsDataService 作为客户端对象的方法或参数为空。
我已经检查了 AWS 端的 Java RDS 数据 API,但那里没有提到任何内容。
知道哪里出了问题吗?
您似乎没有通过RDS数据服务,您需要进行如下操作:
AWSRDSData awsrdsData = AWSRDSDataClient.builder().build();
RdsDataClient client = RdsDataClient.builder()
.rdsDataService(awsrdsData)
.database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN)
.build();
您还可以按如下方式配置映射选项:
MappingOptions mappingOptions = MappingOptions.builder()
.ignoreMissingSetters(true)
.useLabelForMapping(true)
.build();
AWSRDSData awsrdsData = AWSRDSDataClient.builder().build();
RdsDataClient client = RdsDataClient.builder()
.rdsDataService(awsrdsData)
.database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN)
.mappingOptions(mappingOptions)
.build();
我想通过 AWS 从 2020 年初开始提供的 data-api 访问数据库。
这是我的 Maven 代码(仅显示 aws 依赖项):
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.790</version>
</dependency>
<dependency>
<groupId>software.amazon.rdsdata</groupId>
<artifactId>rds-data-api-client-library-java</artifactId>
<version>1.0.4</version>
</dependency>
这是我的Java代码
public class Opstarten {
public static final String RESOURCE_ARN = "arn:aws:rds:eu-central <number - name >";
public static final String SECRET_ARN = "arn:aws:secretsmanager:eu-central-1:<secret>";
public static final String DATABASE = "dbmulesoft";
public static void main(String[] args) {
// TODO Auto-generated method stub
new Opstarten().testme();
}
public void testme( ) {
var account1 = new Account(1, "John"); //plain POJO conform AWS manual hello world example
var account2 = new Account(2, "Mary");
RdsDataClient client = RdsDataClient.builder().database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN).build();
client.forSql("INSERT INTO accounts(accountId, name) VALUES(:accountId, :name)").
withParameter(account1).withParameter(account2).execute();
}
}
我遇到的错误: 线程“main”中的异常 java.lang.NullPointerException 在 com.amazon.rdsdata.client.RdsDataClient.executeStatement(RdsDataClient.java:134) 在 com.amazon.rdsdata.client.Executor.executeAsSingle(Executor.java:92) 在 com.amazon.rdsdata.client.Executor.execute(Executor.java:77) 在 nl.bpittens.aws.rds.worker.Opstarten.testme(Opstarten.java:47) 在 nl.bpittens.aws.rds.worker.Opstarten.main(Opstarten.java:29)
当我调试它时,我看到客户端对象为空,但 rdsDataService 作为客户端对象的方法或参数为空。 我已经检查了 AWS 端的 Java RDS 数据 API,但那里没有提到任何内容。
知道哪里出了问题吗?
您似乎没有通过RDS数据服务,您需要进行如下操作:
AWSRDSData awsrdsData = AWSRDSDataClient.builder().build();
RdsDataClient client = RdsDataClient.builder()
.rdsDataService(awsrdsData)
.database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN)
.build();
您还可以按如下方式配置映射选项:
MappingOptions mappingOptions = MappingOptions.builder()
.ignoreMissingSetters(true)
.useLabelForMapping(true)
.build();
AWSRDSData awsrdsData = AWSRDSDataClient.builder().build();
RdsDataClient client = RdsDataClient.builder()
.rdsDataService(awsrdsData)
.database(DATABASE)
.resourceArn(RESOURCE_ARN)
.secretArn(SECRET_ARN)
.mappingOptions(mappingOptions)
.build();