forked from jenkinsci/database-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBasicDataSource2.java
More file actions
97 lines (80 loc) · 2.81 KB
/
BasicDataSource2.java
File metadata and controls
97 lines (80 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package org.jenkinsci.plugins.database;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
/**
* HikariCP-based {@link DataSource} with convenience methods.
* Replaces the deprecated commons-dbcp2 BasicDataSource.
*
* @author Kohsuke Kawaguchi
*/
public class BasicDataSource2 {
private final HikariConfig config;
public BasicDataSource2() {
this.config = new HikariConfig();
// Set sensible defaults
config.setAutoCommit(true);
config.setConnectionTimeout(30000); // 30 seconds
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
config.setMinimumIdle(1);
config.setMaximumPoolSize(10);
}
public void setDriverClass(Class<? extends Driver> driverClass) {
config.setDriverClassName(driverClass.getName());
}
public void setDriverClassName(String driverClassName) {
config.setDriverClassName(driverClassName);
}
public void setDriverClassLoader(ClassLoader classLoader) {
// HikariCP doesn't have direct setDriverClassLoader, but we can set it on the config
// The driver will be loaded by the current thread's context classloader
Thread.currentThread().setContextClassLoader(classLoader);
}
public void setUrl(String url) {
config.setJdbcUrl(url);
}
public void setUsername(String username) {
config.setUsername(username);
}
public void setPassword(String password) {
config.setPassword(password);
}
public void setValidationQuery(String validationQuery) {
if (validationQuery != null && !validationQuery.isEmpty()) {
config.setConnectionTestQuery(validationQuery);
}
}
public void addConnectionProperty(String name, String value) {
config.addDataSourceProperty(name, value);
}
public void setInitialSize(Integer initialSize) {
if (initialSize != null) {
config.setMinimumIdle(initialSize);
}
}
public void setMaxTotal(Integer maxTotal) {
if (maxTotal != null) {
config.setMaximumPoolSize(maxTotal);
}
}
public void setMaxIdle(Integer maxIdle) {
// HikariCP manages idle connections automatically
// We don't need to set this explicitly
}
public void setMinIdle(Integer minIdle) {
if (minIdle != null) {
config.setMinimumIdle(minIdle);
}
}
public DataSource createDataSource() throws SQLException {
try {
return new HikariDataSource(config);
} catch (Exception e) {
throw new SQLException("Failed to create HikariCP DataSource", e);
}
}
}