Java 使用dynamodb的tomcat会话管理器
我正在尝试将tomcat会话管理器与dynamoDB一起使用 我参考了aws指南 他们在指南中提到我们必须使用Java 使用dynamodb的tomcat会话管理器,java,amazon-web-services,session,tomcat,Java,Amazon Web Services,Session,Tomcat,我正在尝试将tomcat会话管理器与dynamoDB一起使用 我参考了aws指南 他们在指南中提到我们必须使用 <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
awsAccessKey="myAccessKey"
awsSecretKey="mySecretKey"
createIfNotExist="true" />
</Context>
WEB-INF/WEB.xml
因此,如果我没有给出任何目标区域,默认情况下,这将选择us-east-1(正如aws文档中提到的.jar文件中硬编码的那样)。如果我指定任何区域,它将选择该区域。但是我的应用程序在多个区域中,并且希望每个区域都有单独的dynamo实例。至于多个区域,会话id不是唯一的,所以我不能对所有区域使用相同的dynamo实例
如何做到这一点,任何帮助都将不胜感激。最好创建多个DyanoDB客户端,每个区域一个。您应该使用一些config/prop文件,其中包含不同的aws访问密钥、secret和config,并基于这些文件在应用程序启动时创建客户端。然后根据您的业务逻辑使用它 例如:-我在应用程序中使用
ProfileCredentialsProvider
和下面的配置文件,它使用多个dynamoDB客户端
# AWS DynamoDB setting
mumDynamoDB:
# profile name of aws IAM role which has access to dynamoDB
profileName: mumdynamoDBdev
region: ap-south-1
OrgonDynamoDB:
# profile name of aws IAM role which has access to dynamoDB
profileName: OrgdynamoDBdev
region: us-west-2
下面是一段基于区域和配置文件创建客户机的代码
public static DynamoDB getDocClient(String profileName, String region) {
// http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/creating-clients.html new way of
// creating all the aws clients.
// thread safe impl
AmazonDynamoDB amazonDynamoDBClient = AmazonDynamoDBClientBuilder.standard()
.withRegion(region)
.withCredentials(new ProfileCredentialsProvider(profileName)).build();
docClient = new DynamoDB(amazonDynamoDBClient);
return docClient;
}
然后在应用程序中,根据您的需求,您可以使用适当的客户端。但是正如aws文档中提到的,我必须从context.xml实例化DynamoDBSessionManager,并且context.xml在AppConfig之前执行。因此,我无法知道我必须获取哪个区域的凭据。如果我在执行context.xml时能够以某种方式了解该区域,那么我可以在目标中简单地指定该区域。