1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.guice.datasource.dbcp;
17
18 import jakarta.inject.Inject;
19 import jakarta.inject.Named;
20 import jakarta.inject.Provider;
21
22 import java.time.Duration;
23 import java.util.Map.Entry;
24 import java.util.Properties;
25
26 import javax.sql.DataSource;
27
28 import org.apache.commons.dbcp2.BasicDataSource;
29
30
31
32
33 public final class BasicDataSourceProvider implements Provider<DataSource> {
34
35
36
37
38 private final BasicDataSource dataSource = new BasicDataSource();
39
40
41
42
43
44
45
46
47
48
49
50 @Inject
51 public BasicDataSourceProvider(@Named("JDBC.driver") final String driver, @Named("JDBC.url") final String url,
52 @Named("JDBC.driverClassLoader") final ClassLoader driverClassLoader) {
53 dataSource.setDriverClassLoader(driverClassLoader);
54 dataSource.setDriverClassName(driver);
55 dataSource.setUrl(url);
56 }
57
58
59
60
61
62
63
64
65
66 @com.google.inject.Inject(optional = true)
67 public void setUser(@Named("JDBC.username") final String username) {
68 dataSource.setUsername(username);
69 }
70
71
72
73
74
75
76
77
78
79 @com.google.inject.Inject(optional = true)
80 public void setPassword(@Named("JDBC.password") final String password) {
81 dataSource.setPassword(password);
82 }
83
84
85
86
87
88
89
90 @com.google.inject.Inject(optional = true)
91 public void setAutoCommit(@Named("JDBC.autoCommit") final boolean autoCommit) {
92 dataSource.setDefaultAutoCommit(autoCommit);
93 }
94
95
96
97
98
99
100
101 @com.google.inject.Inject(optional = true)
102 public void setDriverProperties(@Named("JDBC.driverProperties") final Properties driverProperties) {
103 for (Entry<Object, Object> property : driverProperties.entrySet()) {
104 String name = property.getKey().toString();
105 String value = property.getValue().toString();
106 dataSource.addConnectionProperty(name, value);
107 }
108 }
109
110
111
112
113
114
115
116 @com.google.inject.Inject(optional = true)
117 public void setAccessToUnderlyingConnectionAllowed(
118 @Named("DBCP.accessToUnderlyingConnectionAllowed") final boolean allow) {
119 dataSource.setAccessToUnderlyingConnectionAllowed(allow);
120 }
121
122
123
124
125
126
127
128 @com.google.inject.Inject(optional = true)
129 public void setDefaultCatalog(@Named("DBCP.defaultCatalog") final String defaultCatalog) {
130 dataSource.setDefaultCatalog(defaultCatalog);
131 }
132
133
134
135
136
137
138
139 @com.google.inject.Inject(optional = true)
140 public void setDefaultReadOnly(@Named("DBCP.defaultReadOnly") final boolean defaultReadOnly) {
141 dataSource.setDefaultReadOnly(defaultReadOnly);
142 }
143
144
145
146
147
148
149
150 @com.google.inject.Inject(optional = true)
151 public void setDefaultTransactionIsolation(
152 @Named("DBCP.defaultTransactionIsolation") final int defaultTransactionIsolation) {
153 dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
154 }
155
156
157
158
159
160
161
162 @com.google.inject.Inject(optional = true)
163 public void setInitialSize(@Named("DBCP.initialSize") final int initialSize) {
164 dataSource.setInitialSize(initialSize);
165 }
166
167
168
169
170
171
172
173 @com.google.inject.Inject(optional = true)
174 public void setMaxTotal(@Named("DBCP.maxTotal") final int maxTotal) {
175 dataSource.setMaxTotal(maxTotal);
176 }
177
178
179
180
181
182
183
184 @com.google.inject.Inject(optional = true)
185 public void setMaxIdle(@Named("DBCP.maxIdle") final int maxIdle) {
186 dataSource.setMaxIdle(maxIdle);
187 }
188
189
190
191
192
193
194
195 @com.google.inject.Inject(optional = true)
196 public void setMaxOpenPreparedStatements(
197 @Named("DBCP.maxOpenPreparedStatements") final int maxOpenPreparedStatements) {
198 dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
199 }
200
201
202
203
204
205
206
207 @com.google.inject.Inject(optional = true)
208 public void setMaxWaitMillis(@Named("DBCP.maxWaitMillis") final long maxWaitMillis) {
209 dataSource.setMaxWait(Duration.ofMillis(maxWaitMillis));
210 }
211
212
213
214
215
216
217
218 @com.google.inject.Inject(optional = true)
219 public void setMinEvictableIdleTimeMillis(
220 @Named("DBCP.minEvictableIdleTimeMillis") final long minEvictableIdleTimeMillis) {
221 dataSource.setMinEvictableIdle(Duration.ofMillis(minEvictableIdleTimeMillis));
222 }
223
224
225
226
227
228
229
230 @com.google.inject.Inject(optional = true)
231 public void setMinIdle(@Named("DBCP.minIdle") final int minIdle) {
232 dataSource.setMinIdle(minIdle);
233 }
234
235
236
237
238
239
240
241 @com.google.inject.Inject(optional = true)
242 public void setNumTestsPerEvictionRun(@Named("DBCP.numTestsPerEvictionRun") final int numTestsPerEvictionRun) {
243 dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
244 }
245
246
247
248
249
250
251
252 @com.google.inject.Inject(optional = true)
253 public void setPoolPreparedStatements(@Named("DBCP.poolPreparedStatements") final boolean poolPreparedStatements) {
254 dataSource.setPoolPreparedStatements(poolPreparedStatements);
255 }
256
257
258
259
260
261
262
263 @com.google.inject.Inject(optional = true)
264 public void setTestOnBorrow(@Named("DBCP.testOnBorrow") final boolean testOnBorrow) {
265 dataSource.setTestOnBorrow(testOnBorrow);
266 }
267
268
269
270
271
272
273
274 @com.google.inject.Inject(optional = true)
275 public void setTestOnReturn(@Named("DBCP.testOnReturn") final boolean testOnReturn) {
276 dataSource.setTestOnReturn(testOnReturn);
277 }
278
279
280
281
282
283
284
285 @com.google.inject.Inject(optional = true)
286 public void setTestWhileIdle(@Named("DBCP.testWhileIdle") final boolean testWhileIdle) {
287 dataSource.setTestWhileIdle(testWhileIdle);
288 }
289
290
291
292
293
294
295
296 @com.google.inject.Inject(optional = true)
297 public void setTimeBetweenEvictionRunsMillis(
298 @Named("DBCP.timeBetweenEvictionRunsMillis") int timeBetweenEvictionRunsMillis) {
299 dataSource.setDurationBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRunsMillis));
300 }
301
302
303
304
305
306
307
308 @com.google.inject.Inject(optional = true)
309 public void setValidationQuery(@Named("DBCP.validationQuery") final String validationQuery) {
310 dataSource.setValidationQuery(validationQuery);
311 }
312
313 @Override
314 public DataSource get() {
315 return dataSource;
316 }
317
318 }