View Javadoc
1   /*
2    *    Copyright 2009-2023 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.guice.datasource.druid;
17  
18  import com.alibaba.druid.pool.DruidDataSource;
19  import com.google.inject.Inject;
20  
21  import jakarta.inject.Named;
22  import jakarta.inject.Provider;
23  
24  import java.sql.SQLException;
25  import java.util.Properties;
26  
27  import javax.sql.DataSource;
28  
29  /**
30   * Provides the Druid DataSource.
31   *
32   * @author lazeyliu
33   */
34  public class DruidDataSourceProvider implements Provider<DataSource> {
35  
36    DruidDataSource dataSource = new DruidDataSource();
37  
38    @Inject
39    public void setDriverClassName(@Named("JDBC.driverClassName") final String driverClassName) {
40      dataSource.setDriverClassName(driverClassName);
41    }
42  
43    @Inject
44    public void setUrl(@Named("JDBC.url") final String url) {
45      dataSource.setUrl(url);
46    }
47  
48    @Inject
49    public void setUsername(@Named("JDBC.username") final String username) {
50      dataSource.setUsername(username);
51    }
52  
53    @Inject
54    public void setPassword(@Named("JDBC.password") final String password) {
55      dataSource.setPassword(password);
56    }
57  
58    @Inject(optional = true)
59    public void setDefaultAutoCommit(@Named("JDBC.autoCommit") final boolean defaultAutoCommit) {
60      dataSource.setDefaultAutoCommit(defaultAutoCommit);
61    }
62  
63    @Inject(optional = true)
64    public void setDefaultReadOnly(@Named("JDBC.readOnly") final boolean defaultReadOnly) {
65      dataSource.setDefaultReadOnly(defaultReadOnly);
66    }
67  
68    @Inject(optional = true)
69    public void setDefaultTransactionIsolation(
70        @Named("JDBC.transactionIsolation") final int defaultTransactionIsolation) {
71      dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
72    }
73  
74    @Inject(optional = true)
75    public void setDefaultCatalog(@Named("JDBC.catalog") final String defaultCatalog) {
76      dataSource.setDefaultCatalog(defaultCatalog);
77    }
78  
79    @Inject(optional = true)
80    public void setMaxActive(@Named("JDBC.maxActive") final int maxActive) {
81      dataSource.setMaxActive(maxActive);
82    }
83  
84    @Inject(optional = true)
85    public void setMinIdle(@Named("JDBC.minIdle") final int minIdle) {
86      dataSource.setMinIdle(minIdle);
87    }
88  
89    @Inject(optional = true)
90    public void setInitialSize(@Named("JDBC.initialSize") final int initialSize) {
91      dataSource.setInitialSize(initialSize);
92    }
93  
94    @Inject(optional = true)
95    public void setMaxWait(@Named("JDBC.maxWait") final long maxWait) {
96      dataSource.setMaxWait(maxWait);
97    }
98  
99    @Inject(optional = true)
100   public void setTestOnBorrow(@Named("JDBC.testOnBorrow") final boolean testOnBorrow) {
101     dataSource.setTestOnBorrow(testOnBorrow);
102   }
103 
104   @Inject(optional = true)
105   public void setTestOnReturn(@Named("JDBC.testOnReturn") final boolean testOnReturn) {
106     dataSource.setTestOnReturn(testOnReturn);
107   }
108 
109   @Inject(optional = true)
110   public void setTimeBetweenEvictionRunsMillis(
111       @Named("JDBC.timeBetweenEvictionRunsMillis") final long timeBetweenEvictionRunsMillis) {
112     dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
113   }
114 
115   @Inject(optional = true)
116   public void setMinEvictableIdleTimeMillis(
117       @Named("JDBC.minEvictableIdleTimeMillis") final long minEvictableIdleTimeMillis) {
118     dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
119   }
120 
121   @Inject(optional = true)
122   public void setTestWhileIdle(@Named("JDBC.testWhileIdle") final boolean testWhileIdle) {
123     dataSource.setTestWhileIdle(testWhileIdle);
124   }
125 
126   @Inject(optional = true)
127   public void setValidationQuery(@Named("JDBC.validationQuery") final String validationQuery) {
128     dataSource.setValidationQuery(validationQuery);
129   }
130 
131   @Inject(optional = true)
132   public void setValidationQueryTimeout(@Named("JDBC.validationQueryTimeout") final int validationQueryTimeout) {
133     dataSource.setValidationQueryTimeout(validationQueryTimeout);
134   }
135 
136   @Inject(optional = true)
137   public void setAccessToUnderlyingConnectionAllowed(
138       @Named("JDBC.accessToUnderlyingConnectionAllowed") final boolean accessToUnderlyingConnectionAllowed) {
139     dataSource.setAccessToUnderlyingConnectionAllowed(accessToUnderlyingConnectionAllowed);
140   }
141 
142   @Inject(optional = true)
143   public void setRemoveAbandoned(@Named("JDBC.removeAbandoned") final boolean removeAbandoned) {
144     dataSource.setRemoveAbandoned(removeAbandoned);
145   }
146 
147   @Inject(optional = true)
148   public void setRemoveAbandonedTimeout(@Named("JDBC.removeAbandonedTimeout") final int removeAbandonedTimeout) {
149     dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
150   }
151 
152   @Inject(optional = true)
153   public void setLogAbandoned(@Named("JDBC.logAbandoned") final boolean logAbandoned) {
154     dataSource.setLogAbandoned(logAbandoned);
155   }
156 
157   @Inject(optional = true)
158   public void setPoolPreparedStatements(@Named("JDBC.poolPreparedStatements") final boolean poolPreparedStatements) {
159     dataSource.setPoolPreparedStatements(poolPreparedStatements);
160   }
161 
162   @Inject(optional = true)
163   public void setMaxOpenPreparedStatements(
164       @Named("JDBC.maxOpenPreparedStatements") final int maxOpenPreparedStatements) {
165     dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
166   }
167 
168   @Inject(optional = true)
169   public void setConnectProperties(@Named("JDBC.connectProperties") final Properties connectionProperties) {
170     dataSource.setConnectProperties(connectionProperties);
171   }
172 
173   @Inject(optional = true)
174   public void setConnectionProperties(@Named("JDBC.connectionProperties") final String connectionProperties) {
175     dataSource.setConnectionProperties(connectionProperties);
176   }
177 
178   @Inject(optional = true)
179   public void setFilters(@Named("JDBC.filters") final String filters) throws SQLException {
180     dataSource.setFilters(filters);
181   }
182 
183   @Inject(optional = true)
184   public void setExceptionSorter(@Named("JDBC.exceptionSorter") final String exceptionSorter) throws SQLException {
185     dataSource.setExceptionSorter(exceptionSorter);
186   }
187 
188   @Inject(optional = true)
189   public void setExceptionSorterClassName(@Named("JDBC.exceptionSorterClassName") final String exceptionSorterClassName)
190       throws Exception {
191     dataSource.setExceptionSorterClassName(exceptionSorterClassName);
192   }
193 
194   @Override
195   public DataSource get() {
196     return dataSource;
197   }
198 
199 }