15
15
*/
16
16
package io .awspring .cloud .autoconfigure .dynamodb ;
17
17
18
+ import java .io .IOException ;
19
+ import java .util .Optional ;
20
+
18
21
import io .awspring .cloud .autoconfigure .core .AwsClientBuilderConfigurer ;
19
22
import io .awspring .cloud .autoconfigure .core .AwsClientCustomizer ;
20
23
import io .awspring .cloud .autoconfigure .core .CredentialsProviderAutoConfiguration ;
21
24
import 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 ;
25
31
import org .springframework .beans .factory .ObjectProvider ;
26
32
import org .springframework .boot .autoconfigure .AutoConfiguration ;
27
33
import org .springframework .boot .autoconfigure .AutoConfigureAfter ;
36
42
import org .springframework .context .annotation .Conditional ;
37
43
import org .springframework .context .annotation .Configuration ;
38
44
import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
45
+ import software .amazon .awssdk .enhanced .dynamodb .DynamoDbEnhancedAsyncClient ;
39
46
import software .amazon .awssdk .enhanced .dynamodb .DynamoDbEnhancedClient ;
40
47
import software .amazon .awssdk .regions .providers .AwsRegionProvider ;
48
+ import software .amazon .awssdk .services .dynamodb .DynamoDbAsyncClient ;
49
+ import software .amazon .awssdk .services .dynamodb .DynamoDbAsyncClientBuilder ;
41
50
import software .amazon .awssdk .services .dynamodb .DynamoDbClient ;
42
51
import software .amazon .awssdk .services .dynamodb .DynamoDbClientBuilder ;
52
+ import software .amazon .dax .ClusterDaxAsyncClient ;
43
53
import software .amazon .dax .ClusterDaxClient ;
44
54
45
55
/**
51
61
*/
52
62
@ AutoConfiguration
53
63
@ EnableConfigurationProperties (DynamoDbProperties .class )
54
- @ ConditionalOnClass ({ DynamoDbClient .class , DynamoDbEnhancedClient . class , DynamoDbTemplate .class })
64
+ @ ConditionalOnClass ({ DynamoDbClient .class , DynamoDbAsyncClient .class })
55
65
@ AutoConfigureAfter ({ CredentialsProviderAutoConfiguration .class , RegionProviderAutoConfiguration .class })
56
66
@ ConditionalOnProperty (name = "spring.cloud.aws.dynamodb.enabled" , havingValue = "true" , matchIfMissing = true )
57
67
public class DynamoDbAutoConfiguration {
@@ -60,39 +70,59 @@ public class DynamoDbAutoConfiguration {
60
70
@ ConditionalOnClass (name = "software.amazon.dax.ClusterDaxClient" )
61
71
static class DaxDynamoDbClient {
62
72
63
- @ ConditionalOnMissingBean
64
- @ Bean
65
- public DynamoDbClient dynamoDbClient (DynamoDbProperties properties , AwsCredentialsProvider credentialsProvider ,
66
- AwsRegionProvider regionProvider ) throws IOException {
67
- DaxProperties daxProperties = properties .getDax ();
68
-
73
+ private software .amazon .dax .Configuration .Builder toAwsDaxConfiguration (DaxProperties daxProperties ) {
69
74
PropertyMapper propertyMapper = PropertyMapper .get ();
70
75
software .amazon .dax .Configuration .Builder configuration = software .amazon .dax .Configuration .builder ();
71
76
propertyMapper .from (daxProperties .getIdleTimeoutMillis ()).whenNonNull ()
72
- .to (configuration ::idleTimeoutMillis );
77
+ .to (configuration ::idleTimeoutMillis );
73
78
propertyMapper .from (daxProperties .getConnectionTtlMillis ()).whenNonNull ()
74
- .to (configuration ::connectionTtlMillis );
79
+ .to (configuration ::connectionTtlMillis );
75
80
propertyMapper .from (daxProperties .getConnectTimeoutMillis ()).whenNonNull ()
76
- .to (configuration ::connectTimeoutMillis );
81
+ .to (configuration ::connectTimeoutMillis );
77
82
propertyMapper .from (daxProperties .getRequestTimeoutMillis ()).whenNonNull ()
78
- .to (configuration ::requestTimeoutMillis );
83
+ .to (configuration ::requestTimeoutMillis );
79
84
propertyMapper .from (daxProperties .getWriteRetries ()).whenNonNull ().to (configuration ::writeRetries );
80
85
propertyMapper .from (daxProperties .getReadRetries ()).whenNonNull ().to (configuration ::readRetries );
81
86
propertyMapper .from (daxProperties .getClusterUpdateIntervalMillis ()).whenNonNull ()
82
- .to (configuration ::clusterUpdateIntervalMillis );
87
+ .to (configuration ::clusterUpdateIntervalMillis );
83
88
propertyMapper .from (daxProperties .getEndpointRefreshTimeoutMillis ()).whenNonNull ()
84
- .to (configuration ::endpointRefreshTimeoutMillis );
89
+ .to (configuration ::endpointRefreshTimeoutMillis );
85
90
propertyMapper .from (daxProperties .getMaxConcurrency ()).whenNonNull ().to (configuration ::maxConcurrency );
86
91
propertyMapper .from (daxProperties .getMaxPendingConnectionAcquires ()).whenNonNull ()
87
- .to (configuration ::maxPendingConnectionAcquires );
92
+ .to (configuration ::maxPendingConnectionAcquires );
88
93
propertyMapper .from (daxProperties .getSkipHostNameVerification ()).whenNonNull ()
89
- .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 );
90
107
91
108
configuration .region (AwsClientBuilderConfigurer .resolveRegion (properties , regionProvider ))
92
109
.credentialsProvider (credentialsProvider ).url (properties .getDax ().getUrl ());
93
110
return ClusterDaxClient .builder ().overrideConfiguration (configuration .build ()).build ();
94
111
}
95
112
113
+ @ ConditionalOnMissingBean
114
+ @ Bean
115
+ public DynamoDbAsyncClient daxDynamoDbAsyncClient (DynamoDbProperties properties ,
116
+ AwsCredentialsProvider credentialsProvider ,
117
+ AwsRegionProvider regionProvider ) throws IOException {
118
+ DaxProperties daxProperties = properties .getDax ();
119
+
120
+ software .amazon .dax .Configuration .Builder configuration = toAwsDaxConfiguration (daxProperties );
121
+
122
+ configuration .region (AwsClientBuilderConfigurer .resolveRegion (properties , regionProvider ))
123
+ .credentialsProvider (credentialsProvider ).url (properties .getDax ().getUrl ());
124
+ return ClusterDaxAsyncClient .builder ().overrideConfiguration (configuration .build ()).build ();
125
+ }
96
126
}
97
127
98
128
@ Conditional (MissingDaxUrlCondition .class )
@@ -101,31 +131,61 @@ static class StandardDynamoDbClient {
101
131
102
132
@ ConditionalOnMissingBean
103
133
@ Bean
104
- public DynamoDbClient dynamoDbClient (AwsClientBuilderConfigurer awsClientBuilderConfigurer ,
134
+ public DynamoDbClient standardDynamoDbClient (AwsClientBuilderConfigurer awsClientBuilderConfigurer ,
105
135
ObjectProvider <AwsClientCustomizer <DynamoDbClientBuilder >> configurer , DynamoDbProperties properties ) {
106
136
return awsClientBuilderConfigurer
107
137
.configure (DynamoDbClient .builder (), properties , configurer .getIfAvailable ()).build ();
108
138
}
139
+ }
140
+
141
+ @ Conditional (MissingDaxUrlCondition .class )
142
+ @ Configuration (proxyBeanMethods = false )
143
+ static class StandardDynamoDbAsyncClient {
144
+
145
+ @ ConditionalOnMissingBean
146
+ @ Bean
147
+ public DynamoDbAsyncClient standardDynamoDbAsyncClient (AwsClientBuilderConfigurer awsClientBuilderConfigurer ,
148
+ ObjectProvider <AwsClientCustomizer <DynamoDbAsyncClientBuilder >> configurer ,
149
+ DynamoDbProperties properties ) {
150
+ return awsClientBuilderConfigurer
151
+ .configure (DynamoDbAsyncClient .builder (), properties , configurer .getIfAvailable ()).build ();
152
+ }
109
153
110
154
}
111
155
112
- @ ConditionalOnMissingBean
113
- @ Bean
114
- public DynamoDbEnhancedClient dynamoDbEnhancedClient (DynamoDbClient dynamoDbClient ) {
115
- return DynamoDbEnhancedClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
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
+ }
165
+
166
+ @ ConditionalOnMissingBean
167
+ @ ConditionalOnClass (DynamoDbEnhancedAsyncClient .class )
168
+ @ Bean
169
+ public DynamoDbEnhancedAsyncClient dynamoDbEnhancedAsyncClient (DynamoDbAsyncClient dynamoDbClient ) {
170
+ return DynamoDbEnhancedAsyncClient .builder ().dynamoDbClient (dynamoDbClient ).build ();
171
+ }
116
172
}
117
173
118
- @ ConditionalOnMissingBean (DynamoDbOperations .class )
119
- @ Bean
120
- public DynamoDbTemplate dynamoDBTemplate (DynamoDbProperties properties ,
121
- DynamoDbEnhancedClient dynamoDbEnhancedClient , Optional <DynamoDbTableSchemaResolver > tableSchemaResolver ,
122
- Optional <DynamoDbTableNameResolver > tableNameResolver ) {
123
- 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
124
183
.orElseGet (DefaultDynamoDbTableSchemaResolver ::new );
125
184
126
- DynamoDbTableNameResolver tableNameRes = tableNameResolver
185
+ DynamoDbTableNameResolver tableNameRes = tableNameResolver
127
186
.orElseGet (() -> new DefaultDynamoDbTableNameResolver (properties .getTablePrefix ()));
128
- return new DynamoDbTemplate (dynamoDbEnhancedClient , tableSchemaRes , tableNameRes );
187
+ return new DynamoDbTemplate (dynamoDbEnhancedClient , tableSchemaRes , tableNameRes );
188
+ }
129
189
}
130
190
131
191
static class MissingDaxUrlCondition extends NoneNestedConditions {
0 commit comments