mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
JMX增强
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@694 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
@@ -37,6 +37,7 @@ import javax.naming.StringRefAddr;
|
||||
import javax.sql.ConnectionEvent;
|
||||
import javax.sql.ConnectionEventListener;
|
||||
|
||||
import com.alibaba.druid.VERSION;
|
||||
import com.alibaba.druid.filter.Filter;
|
||||
import com.alibaba.druid.logging.Log;
|
||||
import com.alibaba.druid.logging.LogFactory;
|
||||
@@ -1044,4 +1045,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,4 +43,6 @@ public interface DruidDataSourceMBean extends DruidAbstractDataSourceMBean {
|
||||
boolean isResetStatEnable();
|
||||
|
||||
void setResetStatEnable(boolean resetStatEnable);
|
||||
|
||||
String getVersion();
|
||||
}
|
||||
|
||||
@@ -135,63 +135,7 @@ public class DruidDriver implements Driver, DruidDriverMBean {
|
||||
DataSourceProxyImpl dataSource = proxyDataSources.get(url);
|
||||
|
||||
if (dataSource == null) {
|
||||
String restUrl = url.substring(DEFAULT_PREFIX.length());
|
||||
|
||||
DataSourceProxyConfig config;
|
||||
|
||||
config = new DataSourceProxyConfig();
|
||||
|
||||
List<AbstractDruidFilterConfig> druidFilterConfigList = new ArrayList<AbstractDruidFilterConfig>();
|
||||
String configFile = info.getProperty(CONFIG_PREFIX);
|
||||
if (configFile != null) {
|
||||
DruidFilterConfigLoader.loadConfig(configFile.trim(), druidFilterConfigList);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(DRIVER_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', DRIVER_PREFIX.length());
|
||||
String driverText = restUrl.substring(DRIVER_PREFIX.length(), pos);
|
||||
if (driverText.length() > 0) {
|
||||
config.setRawDriverClassName(driverText.trim());
|
||||
}
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(FILTERS_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', FILTERS_PREFIX.length());
|
||||
String filtersText = restUrl.substring(FILTERS_PREFIX.length(), pos);
|
||||
for (String filterItem : filtersText.split(",")) {
|
||||
DruidLoaderUtils.loadFilter(config.getFilters(), filterItem);
|
||||
}
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
// 如果url中并无定义filter 采用配置
|
||||
if (config.getFilters().size() <= 0) {
|
||||
DruidLoaderUtils.loadFilter(config.getFilters(), druidFilterConfigList);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(NAME_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', NAME_PREFIX.length());
|
||||
String name = restUrl.substring(NAME_PREFIX.length(), pos);
|
||||
config.setName(name);
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(JMX_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', JMX_PREFIX.length());
|
||||
String jmxOption = restUrl.substring(JMX_PREFIX.length(), pos);
|
||||
config.setJmxOption(jmxOption);
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
String rawUrl = restUrl;
|
||||
config.setRawUrl(rawUrl);
|
||||
|
||||
if (config.getRawDriverClassName() == null) {
|
||||
String rawDriverClassname = JdbcUtils.getDriverClassName(rawUrl);
|
||||
config.setRawDriverClassName(rawDriverClassname);
|
||||
}
|
||||
|
||||
config.setUrl(url);
|
||||
DataSourceProxyConfig config = parseConfig(url, info);
|
||||
|
||||
Driver rawDriver = createDriver(config.getRawDriverClassName());
|
||||
|
||||
@@ -218,6 +162,68 @@ public class DruidDriver implements Driver, DruidDriverMBean {
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
public static DataSourceProxyConfig parseConfig(String url, Properties info) throws SQLException {
|
||||
String restUrl = url.substring(DEFAULT_PREFIX.length());
|
||||
|
||||
DataSourceProxyConfig config = new DataSourceProxyConfig();
|
||||
|
||||
List<AbstractDruidFilterConfig> druidFilterConfigList = new ArrayList<AbstractDruidFilterConfig>();
|
||||
|
||||
if (info != null) {
|
||||
String configFile = info.getProperty(CONFIG_PREFIX);
|
||||
if (configFile != null) {
|
||||
DruidFilterConfigLoader.loadConfig(configFile.trim(), druidFilterConfigList);
|
||||
}
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(DRIVER_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', DRIVER_PREFIX.length());
|
||||
String driverText = restUrl.substring(DRIVER_PREFIX.length(), pos);
|
||||
if (driverText.length() > 0) {
|
||||
config.setRawDriverClassName(driverText.trim());
|
||||
}
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(FILTERS_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', FILTERS_PREFIX.length());
|
||||
String filtersText = restUrl.substring(FILTERS_PREFIX.length(), pos);
|
||||
for (String filterItem : filtersText.split(",")) {
|
||||
DruidLoaderUtils.loadFilter(config.getFilters(), filterItem);
|
||||
}
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
// 如果url中并无定义filter 采用配置
|
||||
if (config.getFilters().size() <= 0) {
|
||||
DruidLoaderUtils.loadFilter(config.getFilters(), druidFilterConfigList);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(NAME_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', NAME_PREFIX.length());
|
||||
String name = restUrl.substring(NAME_PREFIX.length(), pos);
|
||||
config.setName(name);
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
if (restUrl.startsWith(JMX_PREFIX)) {
|
||||
int pos = restUrl.indexOf(':', JMX_PREFIX.length());
|
||||
String jmxOption = restUrl.substring(JMX_PREFIX.length(), pos);
|
||||
config.setJmxOption(jmxOption);
|
||||
restUrl = restUrl.substring(pos + 1);
|
||||
}
|
||||
|
||||
String rawUrl = restUrl;
|
||||
config.setRawUrl(rawUrl);
|
||||
|
||||
if (config.getRawDriverClassName() == null) {
|
||||
String rawDriverClassname = JdbcUtils.getDriverClassName(rawUrl);
|
||||
config.setRawDriverClassName(rawDriverClassname);
|
||||
}
|
||||
|
||||
config.setUrl(url);
|
||||
return config;
|
||||
}
|
||||
|
||||
public Driver createDriver(String className) throws SQLException {
|
||||
Class<?> rawDriverClass = DruidLoaderUtils.loadClass(className);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user