1515 */
1616package io .awspring .cloud .autoconfigure .dynamodb ;
1717
18+ import java .io .IOException ;
19+ import java .util .Optional ;
20+
1821import io .awspring .cloud .autoconfigure .core .AwsClientBuilderConfigurer ;
1922import io .awspring .cloud .autoconfigure .core .AwsClientCustomizer ;
2023import io .awspring .cloud .autoconfigure .core .CredentialsProviderAutoConfiguration ;
2124import io .awspring .cloud .autoconfigure .core .RegionProviderAutoConfiguration ;
22- import io .awspring .cloud .dynamodb .*;
23- import java .io .IOException ;
24- import java .util .Optional ;
25+ import io .awspring .cloud .dynamodb .DefaultDynamoDbTableNameResolver ;
26+ import io .awspring .cloud .dynamodb .DefaultDynamoDbTableSchemaResolver ;
27+ import io .awspring .cloud .dynamodb .DynamoDbOperations ;
28+ import io .awspring .cloud .dynamodb .DynamoDbTableNameResolver ;
29+ import io .awspring .cloud .dynamodb .DynamoDbTableSchemaResolver ;
30+ import io .awspring .cloud .dynamodb .DynamoDbTemplate ;
2531import org .springframework .beans .factory .ObjectProvider ;
2632import org .springframework .boot .autoconfigure .AutoConfiguration ;
2733import org .springframework .boot .autoconfigure .AutoConfigureAfter ;
@@ -64,34 +70,40 @@ public class DynamoDbAutoConfiguration {
6470 @ ConditionalOnClass (name = "software.amazon.dax.ClusterDaxClient" )
6571 static class DaxDynamoDbClient {
6672
67- @ ConditionalOnMissingBean
68- @ Bean
69- public DynamoDbClient daxDynamoDbClient (DynamoDbProperties properties ,
70- AwsCredentialsProvider credentialsProvider ,
71- AwsRegionProvider regionProvider ) throws IOException {
72- DaxProperties daxProperties = properties .getDax ();
73-
73+ private software .amazon .dax .Configuration .Builder toAwsDaxConfiguration (DaxProperties daxProperties ) {
7474 PropertyMapper propertyMapper = PropertyMapper .get ();
7575 software .amazon .dax .Configuration .Builder configuration = software .amazon .dax .Configuration .builder ();
7676 propertyMapper .from (daxProperties .getIdleTimeoutMillis ()).whenNonNull ()
77- .to (configuration ::idleTimeoutMillis );
77+ .to (configuration ::idleTimeoutMillis );
7878 propertyMapper .from (daxProperties .getConnectionTtlMillis ()).whenNonNull ()
79- .to (configuration ::connectionTtlMillis );
79+ .to (configuration ::connectionTtlMillis );
8080 propertyMapper .from (daxProperties .getConnectTimeoutMillis ()).whenNonNull ()
81- .to (configuration ::connectTimeoutMillis );
81+ .to (configuration ::connectTimeoutMillis );
8282 propertyMapper .from (daxProperties .getRequestTimeoutMillis ()).whenNonNull ()
83- .to (configuration ::requestTimeoutMillis );
83+ .to (configuration ::requestTimeoutMillis );
8484 propertyMapper .from (daxProperties .getWriteRetries ()).whenNonNull ().to (configuration ::writeRetries );
8585 propertyMapper .from (daxProperties .getReadRetries ()).whenNonNull ().to (configuration ::readRetries );
8686 propertyMapper .from (daxProperties .getClusterUpdateIntervalMillis ()).whenNonNull ()
87- .to (configuration ::clusterUpdateIntervalMillis );
87+ .to (configuration ::clusterUpdateIntervalMillis );
8888 propertyMapper .from (daxProperties .getEndpointRefreshTimeoutMillis ()).whenNonNull ()
89- .to (configuration ::endpointRefreshTimeoutMillis );
89+ .to (configuration ::endpointRefreshTimeoutMillis );
9090 propertyMapper .from (daxProperties .getMaxConcurrency ()).whenNonNull ().to (configuration ::maxConcurrency );
9191 propertyMapper .from (daxProperties .getMaxPendingConnectionAcquires ()).whenNonNull ()
92- .to (configuration ::maxPendingConnectionAcquires );
92+ .to (configuration ::maxPendingConnectionAcquires );
9393 propertyMapper .from (daxProperties .getSkipHostNameVerification ()).whenNonNull ()
94- .to (configuration ::skipHostNameVerification );
94+ .to (configuration ::skipHostNameVerification );
95+
96+ return configuration ;
97+ }
98+
99+ @ ConditionalOnMissingBean
100+ @ Bean
101+ public DynamoDbClient daxDynamoDbClient (DynamoDbProperties properties ,
102+ AwsCredentialsProvider credentialsProvider ,
103+ AwsRegionProvider regionProvider ) throws IOException {
104+ DaxProperties daxProperties = properties .getDax ();
105+
106+ software .amazon .dax .Configuration .Builder configuration = toAwsDaxConfiguration (daxProperties );
95107
96108 configuration .region (AwsClientBuilderConfigurer .resolveRegion (properties , regionProvider ))
97109 .credentialsProvider (credentialsProvider ).url (properties .getDax ().getUrl ());
@@ -105,27 +117,7 @@ public DynamoDbAsyncClient daxDynamoDbAsyncClient(DynamoDbProperties properties,
105117 AwsRegionProvider regionProvider ) throws IOException {
106118 DaxProperties daxProperties = properties .getDax ();
107119
108- PropertyMapper propertyMapper = PropertyMapper .get ();
109- software .amazon .dax .Configuration .Builder configuration = software .amazon .dax .Configuration .builder ();
110- propertyMapper .from (daxProperties .getIdleTimeoutMillis ()).whenNonNull ()
111- .to (configuration ::idleTimeoutMillis );
112- propertyMapper .from (daxProperties .getConnectionTtlMillis ()).whenNonNull ()
113- .to (configuration ::connectionTtlMillis );
114- propertyMapper .from (daxProperties .getConnectTimeoutMillis ()).whenNonNull ()
115- .to (configuration ::connectTimeoutMillis );
116- propertyMapper .from (daxProperties .getRequestTimeoutMillis ()).whenNonNull ()
117- .to (configuration ::requestTimeoutMillis );
118- propertyMapper .from (daxProperties .getWriteRetries ()).whenNonNull ().to (configuration ::writeRetries );
119- propertyMapper .from (daxProperties .getReadRetries ()).whenNonNull ().to (configuration ::readRetries );
120- propertyMapper .from (daxProperties .getClusterUpdateIntervalMillis ()).whenNonNull ()
121- .to (configuration ::clusterUpdateIntervalMillis );
122- propertyMapper .from (daxProperties .getEndpointRefreshTimeoutMillis ()).whenNonNull ()
123- .to (configuration ::endpointRefreshTimeoutMillis );
124- propertyMapper .from (daxProperties .getMaxConcurrency ()).whenNonNull ().to (configuration ::maxConcurrency );
125- propertyMapper .from (daxProperties .getMaxPendingConnectionAcquires ()).whenNonNull ()
126- .to (configuration ::maxPendingConnectionAcquires );
127- propertyMapper .from (daxProperties .getSkipHostNameVerification ()).whenNonNull ()
128- .to (configuration ::skipHostNameVerification );
120+ software .amazon .dax .Configuration .Builder configuration = toAwsDaxConfiguration (daxProperties );
129121
130122 configuration .region (AwsClientBuilderConfigurer .resolveRegion (properties , regionProvider ))
131123 .credentialsProvider (credentialsProvider ).url (properties .getDax ().getUrl ());
@@ -144,7 +136,6 @@ public DynamoDbClient standardDynamoDbClient(AwsClientBuilderConfigurer awsClien
144136 return awsClientBuilderConfigurer
145137 .configure (DynamoDbClient .builder (), properties , configurer .getIfAvailable ()).build ();
146138 }
147-
148139 }
149140
150141 @ Conditional (MissingDaxUrlCondition .class )
@@ -162,32 +153,39 @@ public DynamoDbAsyncClient standardDynamoDbAsyncClient(AwsClientBuilderConfigure
162153
163154 }
164155
165- @ ConditionalOnMissingBean
166- @ ConditionalOnClass (DynamoDbEnhancedClient .class )
167- @ Bean
168- public DynamoDbEnhancedClient dynamoDbEnhancedClient (DynamoDbClient dynamoDbClient ) {
169- return DynamoDbEnhancedClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
170- }
156+ @ ConditionalOnClass (name = "software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient" )
157+ @ Configuration (proxyBeanMethods = false )
158+ static class DynamoDbEnhancedClientConfiguration {
159+ @ ConditionalOnMissingBean
160+ @ ConditionalOnClass (DynamoDbEnhancedClient .class )
161+ @ Bean
162+ public DynamoDbEnhancedClient dynamoDbEnhancedClient (DynamoDbClient dynamoDbClient ) {
163+ return DynamoDbEnhancedClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
164+ }
171165
172- @ ConditionalOnMissingBean
173- @ ConditionalOnClass (DynamoDbEnhancedAsyncClient .class )
174- @ Bean
175- public DynamoDbEnhancedAsyncClient dynamoDbEnhancedAsyncClient (DynamoDbAsyncClient dynamoDbClient ) {
176- return DynamoDbEnhancedAsyncClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
166+ @ ConditionalOnMissingBean
167+ @ ConditionalOnClass (DynamoDbEnhancedAsyncClient .class )
168+ @ Bean
169+ public DynamoDbEnhancedAsyncClient dynamoDbEnhancedAsyncClient (DynamoDbAsyncClient dynamoDbClient ) {
170+ return DynamoDbEnhancedAsyncClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
171+ }
177172 }
178173
179- @ ConditionalOnClass (DynamoDbTemplate .class )
180- @ ConditionalOnMissingBean (DynamoDbOperations .class )
181- @ Bean
182- public DynamoDbTemplate dynamoDBTemplate (DynamoDbProperties properties ,
183- DynamoDbEnhancedClient dynamoDbEnhancedClient , Optional <DynamoDbTableSchemaResolver > tableSchemaResolver ,
184- Optional <DynamoDbTableNameResolver > tableNameResolver ) {
185- DynamoDbTableSchemaResolver tableSchemaRes = tableSchemaResolver
174+ @ ConditionalOnClass (name = "io.awspring.cloud.dynamodb.DynamoDbOperations" )
175+ @ Configuration (proxyBeanMethods = false )
176+ static class DynamoDbTemplateConfiguration {
177+ @ ConditionalOnMissingBean (DynamoDbOperations .class )
178+ @ Bean
179+ public DynamoDbTemplate dynamoDBTemplate (DynamoDbProperties properties ,
180+ DynamoDbEnhancedClient dynamoDbEnhancedClient , Optional <DynamoDbTableSchemaResolver > tableSchemaResolver ,
181+ Optional <DynamoDbTableNameResolver > tableNameResolver ) {
182+ DynamoDbTableSchemaResolver tableSchemaRes = tableSchemaResolver
186183 .orElseGet (DefaultDynamoDbTableSchemaResolver ::new );
187184
188- DynamoDbTableNameResolver tableNameRes = tableNameResolver
185+ DynamoDbTableNameResolver tableNameRes = tableNameResolver
189186 .orElseGet (() -> new DefaultDynamoDbTableNameResolver (properties .getTablePrefix ()));
190- return new DynamoDbTemplate (dynamoDbEnhancedClient , tableSchemaRes , tableNameRes );
187+ return new DynamoDbTemplate (dynamoDbEnhancedClient , tableSchemaRes , tableNameRes );
188+ }
191189 }
192190
193191 static class MissingDaxUrlCondition extends NoneNestedConditions {
0 commit comments