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