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();