📄 cmsdbpool.java
字号:
int maxIdle = config.getInteger(KEY_DATABASE_POOL + '.' + key + '.' + KEY_MAX_IDLE, 5);
int minEvictableIdleTime = config.getInteger(KEY_DATABASE_POOL + '.' + key + '.' + KEY_MIN_EVICTABLE_IDLE_TIME, 1800000);
int minIdle = config.getInteger(KEY_DATABASE_POOL + '.' + key + '.' + KEY_MIN_IDLE, 0);
int numTestsPerEvictionRun = config.getInteger(KEY_DATABASE_POOL + '.' + key + '.' + KEY_NUM_TESTS_PER_EVICTION_RUN, 3);
int timeBetweenEvictionRuns = config.getInteger(KEY_DATABASE_POOL + '.' + key + '.' + KEY_TIME_BETWEEN_EVICTION_RUNS, 3600000);
String testQuery = config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_TEST_QUERY);
String username = config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_USERNAME);
String password = config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_PASSWORD);
String poolUrl = config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_POOL_URL);
String whenExhaustedActionValue = config.getString(
KEY_DATABASE_POOL + '.' + key + '.' + KEY_WHEN_EXHAUSTED_ACTION).trim();
byte whenExhaustedAction = 0;
boolean testOnBorrow = Boolean.valueOf(
config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_TEST_ON_BORROW, "false").trim()).booleanValue();
boolean testWhileIdle = Boolean.valueOf(
config.getString(KEY_DATABASE_POOL + '.' + key + '.' + KEY_TEST_WHILE_IDLE, "false").trim()).booleanValue();
if ("block".equalsIgnoreCase(whenExhaustedActionValue)) {
whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_BLOCK;
} else if ("fail".equalsIgnoreCase(whenExhaustedActionValue)) {
whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_FAIL;
} else if ("grow".equalsIgnoreCase(whenExhaustedActionValue)) {
whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_GROW;
} else {
whenExhaustedAction = GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION;
}
if ("".equals(testQuery)) {
testQuery = null;
}
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
// read the values of the statement pool configuration specified by the given key
boolean poolingStmts = Boolean.valueOf(
config.getString(KEY_DATABASE_STATEMENTS + '.' + key + '.' + KEY_POOLING, CmsStringUtil.TRUE).trim()).booleanValue();
int maxActiveStmts = config.getInteger(KEY_DATABASE_STATEMENTS + '.' + key + '.' + KEY_MAX_ACTIVE, 25);
int maxWaitStmts = config.getInteger(KEY_DATABASE_STATEMENTS + '.' + key + '.' + KEY_MAX_WAIT, 250);
int maxIdleStmts = config.getInteger(KEY_DATABASE_STATEMENTS + '.' + key + '.' + KEY_MAX_IDLE, 15);
String whenStmtsExhaustedActionValue = config.getString(KEY_DATABASE_STATEMENTS
+ '.'
+ key
+ '.'
+ KEY_WHEN_EXHAUSTED_ACTION);
byte whenStmtsExhaustedAction = GenericKeyedObjectPool.WHEN_EXHAUSTED_GROW;
if (whenStmtsExhaustedActionValue != null) {
whenStmtsExhaustedActionValue = whenStmtsExhaustedActionValue.trim();
whenStmtsExhaustedAction = ("block".equalsIgnoreCase(whenStmtsExhaustedActionValue)) ? GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK
: ("fail".equalsIgnoreCase(whenStmtsExhaustedActionValue)) ? GenericKeyedObjectPool.WHEN_EXHAUSTED_FAIL
: GenericKeyedObjectPool.WHEN_EXHAUSTED_GROW;
}
// create an instance of the JDBC driver
Class.forName(jdbcDriver).newInstance();
// initialize a keyed object pool to store connections
GenericObjectPool connectionPool = new GenericObjectPool(null);
/* Abandoned pool configuration:
*
* In case the systems encounters "pool exhaustion" (runs out of connections),
* comment the above line with "new GenericObjectPool(null)" and uncomment the
* 5 lines below. This will generate an "abandoned pool" configuration that logs
* abandoned connections to the System.out. Unfortunatly this code is deprecated,
* so to avoid code warnings it's also disabled here.
* Tested with commons-pool v 1.2.
*/
// AbandonedConfig abandonedConfig = new AbandonedConfig();
// abandonedConfig.setLogAbandoned(true);
// abandonedConfig.setRemoveAbandoned(true);
// abandonedConfig.setRemoveAbandonedTimeout(5);
// GenericObjectPool connectionPool = new AbandonedObjectPool(null, abandonedConfig);
// initialize an object pool to store connections
connectionPool.setMaxActive(maxActive);
connectionPool.setMaxIdle(maxIdle);
connectionPool.setMinIdle(minIdle);
connectionPool.setMaxWait(maxWait);
connectionPool.setWhenExhaustedAction(whenExhaustedAction);
if (testQuery != null) {
connectionPool.setTestOnBorrow(testOnBorrow);
connectionPool.setTestWhileIdle(testWhileIdle);
connectionPool.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRuns);
connectionPool.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
connectionPool.setMinEvictableIdleTimeMillis(minEvictableIdleTime);
}
// initialize a connection factory to make the DriverManager taking connections from the pool
if (jdbcUrlParams != null) {
jdbcUrl += jdbcUrlParams;
}
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(jdbcUrl, username, password);
// Set up statement pool, if desired
GenericKeyedObjectPoolFactory statementFactory = null;
if (poolingStmts) {
statementFactory = new GenericKeyedObjectPoolFactory(
null,
maxActiveStmts,
whenStmtsExhaustedAction,
maxWaitStmts,
maxIdleStmts);
}
// initialize a factory to obtain pooled connections and prepared statements
new PoolableConnectionFactory(connectionFactory, connectionPool, statementFactory, testQuery, false, true);
// initialize a new pooling driver using the pool
PoolingDriver driver = new PoolingDriver();
driver.registerPool(poolUrl, connectionPool);
// try to connect once to the database to ensure it can be connected to at all
Connection con = connectionFactory.createConnection();
con.close();
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_JDBC_POOL_2, poolUrl, jdbcUrl));
}
return driver;
}
/**
* Returns the database pool name for a given configuration key.<p>
*
* @param configuration the configuration
* @param key a db pool configuration key
* @return the database pool name
*/
public static String getDbPoolName(Map configuration, String key) {
// TODO: name should be refactored to getDbPoolUrl
// changed KEY_JDBC_URL to KEY_POOL_URL
return configuration.get(KEY_DATABASE_POOL + '.' + key + '.' + KEY_POOL_URL).toString();
/*
String jdbcUrl = configuration.get(KEY_DATABASE_POOL + '.' + key + '.' + KEY_JDBC_URL).toString();
if (jdbcUrl.startsWith(OPENCMS_URL_PREFIX)) {
return jdbcUrl.substring(jdbcUrl.indexOf(':'));
} else {
return jdbcUrl;
}
*/
}
/**
* Returns a list of available database pool names.<p>
*
* @param configuration the configuration
* @return a list of database pool names
*/
public static List getDbPoolNames(Map configuration) {
// TODO: name should be refactored to getDbPoolUrls
ExtendedProperties config;
if (configuration instanceof ExtendedProperties) {
config = (ExtendedProperties)configuration;
} else {
config = new ExtendedProperties();
config.putAll(configuration);
}
List dbPoolNames = new ArrayList();
String[] driverPoolNames = config.getStringArray(CmsDriverManager.CONFIGURATION_DB + ".pools");
for (int i = 0; i < driverPoolNames.length; i++) {
dbPoolNames.add(getDbPoolName(configuration, driverPoolNames[i]));
}
return dbPoolNames;
}
/**
* Returns the name of the default database connection pool.<p>
*
* @return the name of the default database connection pool
*/
public static String getDefaultDbPoolName() {
return OPENCMS_DEFAULT_POOL_NAME;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -