前提条件:
使用c3p0创建mysql数据库连接:
ComboPooledDataSource pool = new ComboPooledDataSource();
疑问:
如果源码目录下只是单独存在c3p0-config.xml 和 c3p0.properties其中一个配置文件,读取操作数据库是正常的;如果源码目录下同时存在c3p0-config.xml 和 c3p0.properties,读取的配置始终是.xml文件里面的数据库连接基本信息;
问题解决:
解压c3p0-0.9.1.2.jar包,使用jd-gui反编译解压的class文件,查看相关源代码;package com.mchange.v2.c3p0.cfg;
import com.mchange.v2.cfg.MultiPropertiesConfig;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Properties;
public class DefaultC3P0ConfigFinder
implements C3P0ConfigFinder
{
static final String XML_CFG_FILE_KEY = "com.mchange.v2.c3p0.cfg.xml";
public C3P0Config findConfig()
throws Exception
{
HashMap flatDefaults = C3P0ConfigUtils.extractHardcodedC3P0Defaults();
flatDefaults.putAll(C3P0ConfigUtils.extractC3P0PropertiesResources());
String cfgFile = MultiPropertiesConfig.readVmConfig().getProperty("com.mchange.v2.c3p0.cfg.xml");
C3P0Config out;
C3P0Config out;
if (cfgFile == null)
{
C3P0Config xmlConfig = C3P0ConfigXmlUtils.extractXmlConfigFromDefaultResource();
C3P0Config out;
if (xmlConfig != null)
{
insertDefaultsUnderNascentConfig(flatDefaults, xmlConfig);
out = xmlConfig;
}
else
{
out = C3P0ConfigUtils.configFromFlatDefaults(flatDefaults);
}
}
else
{
InputStream is = new BufferedInputStream(new FileInputStream(cfgFile));
try
{
C3P0Config xmlConfig = C3P0ConfigXmlUtils.extractXmlConfigFromInputStream(is);
insertDefaultsUnderNascentConfig(flatDefaults, xmlConfig);
out = xmlConfig;
try
{
is.close();
}
catch (Exception e)
{
e.printStackTrace();
}
sysPropConfig = C3P0ConfigUtils.findAllC3P0SystemProperties();
}
finally
{
try
{
is.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Properties sysPropConfig;
out.defaultConfig.props.putAll(sysPropConfig);
return out;
}
private void insertDefaultsUnderNascentConfig(HashMap flatDefaults, C3P0Config config)
{
flatDefaults.putAll(config.defaultConfig.props);
config.defaultConfig.props = flatDefaults;
}
}
结论:
c3p0会默认读取.xml的配置文件,如果找不到.xml的配置文件才会去读取.properties配置文件中的信息,这里暂时备注提醒下。