如何在 Spring 启动时连接 Amazon QLDB 数据库?
How to connect Amazon QLDB database in Spring boot?
我在 AWS qLdB 中有一个基于分类帐的数据库“演示”。所以我想通过 Spring 引导 Web 应用程序连接到该数据库。
首先,我给了QLDB这样的用户权限
然后我在pom中添加了以下maven依赖。
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-qldb -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-qldb</artifactId>
<version>1.12.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/software.amazon.ion/ion-java -->
<dependency>
<groupId>software.amazon.ion</groupId>
<artifactId>ion-java</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>software.amazon.qldb</groupId>
<artifactId>amazon-qldb-driver-java</artifactId>
<version>2.3.1</version>
</dependency>
在 Application.yml 中,我保留了这些属性。
cloud:
aws:
credentials:
access-key:
secret-key:
region: US East (Ohio)
然后我创建一个配置 class 以连接到 QLDB 之类的。
@Configuration
public class QldbConfigs {
public static IonSystem ionSys = IonSystemBuilder.standard().build();
public static QldbDriver qldbDriver;
@Bean
public void setupDb(){
System.out.println("Initializing the driver");
qldbDriver = QldbDriver.builder()
.ledger("demo")
.transactionRetryPolicy(RetryPolicy
.builder()
.maxRetries(3)
.build())
.sessionClientBuilder(QldbSessionClient.builder())
.build();
}
}
如果我运行这个,它给出了一个例外,比如
software.amazon.awssdk.core.exception.SdkClientException:无法从链中的任何提供商加载区域 software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@6076c66:[software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@57b1ec84:无法从系统设置加载区域。必须通过环境变量 (AWS_REGION) 或系统 属性 (aws.region) 指定区域。,software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@5a82bc58:配置文件中未提供区域:默认,software.amazon.awssdk.regions.providers.InstanceProfileRegionProvider@5d37aa0f:无法联系 EC2 元数据服务。]
我该如何解决这个问题?
AWS SDK 将查找 a set of predefined places to find some credentials to supply to the service when it connects. According to the Spring Boot documentation:
Spring Cloud for AWS can automatically detect this based on your environment or stack once you enable the Spring Boot property cloud.aws.region.auto.
You can also set the region in a static fashion for your application:
cloud:
aws:
region:
static: eu-central-1
auto: false
这与您在示例中配置区域的方式不同。为了完全确定,您可以直接在 QldbSessionClient.builder
上设置区域,如下所示。
qldbDriver = QldbDriver.builder()
.ledger("demo")
.transactionRetryPolicy(RetryPolicy
.builder()
.maxRetries(3)
.build())
.sessionClientBuilder(
QldbSessionClient.builder().region(Region.of("us-east-1")))
.build();
我在 AWS qLdB 中有一个基于分类帐的数据库“演示”。所以我想通过 Spring 引导 Web 应用程序连接到该数据库。
首先,我给了QLDB这样的用户权限
然后我在pom中添加了以下maven依赖。
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-qldb -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-qldb</artifactId>
<version>1.12.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/software.amazon.ion/ion-java -->
<dependency>
<groupId>software.amazon.ion</groupId>
<artifactId>ion-java</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>software.amazon.qldb</groupId>
<artifactId>amazon-qldb-driver-java</artifactId>
<version>2.3.1</version>
</dependency>
在 Application.yml 中,我保留了这些属性。
cloud:
aws:
credentials:
access-key:
secret-key:
region: US East (Ohio)
然后我创建一个配置 class 以连接到 QLDB 之类的。
@Configuration
public class QldbConfigs {
public static IonSystem ionSys = IonSystemBuilder.standard().build();
public static QldbDriver qldbDriver;
@Bean
public void setupDb(){
System.out.println("Initializing the driver");
qldbDriver = QldbDriver.builder()
.ledger("demo")
.transactionRetryPolicy(RetryPolicy
.builder()
.maxRetries(3)
.build())
.sessionClientBuilder(QldbSessionClient.builder())
.build();
}
}
如果我运行这个,它给出了一个例外,比如
software.amazon.awssdk.core.exception.SdkClientException:无法从链中的任何提供商加载区域 software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@6076c66:[software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@57b1ec84:无法从系统设置加载区域。必须通过环境变量 (AWS_REGION) 或系统 属性 (aws.region) 指定区域。,software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@5a82bc58:配置文件中未提供区域:默认,software.amazon.awssdk.regions.providers.InstanceProfileRegionProvider@5d37aa0f:无法联系 EC2 元数据服务。]
我该如何解决这个问题?
AWS SDK 将查找 a set of predefined places to find some credentials to supply to the service when it connects. According to the Spring Boot documentation:
Spring Cloud for AWS can automatically detect this based on your environment or stack once you enable the Spring Boot property cloud.aws.region.auto.
You can also set the region in a static fashion for your application:
cloud:
aws:
region:
static: eu-central-1
auto: false
这与您在示例中配置区域的方式不同。为了完全确定,您可以直接在 QldbSessionClient.builder
上设置区域,如下所示。
qldbDriver = QldbDriver.builder()
.ledger("demo")
.transactionRetryPolicy(RetryPolicy
.builder()
.maxRetries(3)
.build())
.sessionClientBuilder(
QldbSessionClient.builder().region(Region.of("us-east-1")))
.build();