JDBC使用c3p0连接池疑问

前提条件:

使用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配置文件中的信息,这里暂时备注提醒下。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值