java c3p0:如何配置 autoreconnect=true?
Posted
技术标签:
【中文标题】java c3p0:如何配置 autoreconnect=true?【英文标题】:java c3p0: how can i configure autoreconnect=true? 【发布时间】:2010-08-18 11:12:07 【问题描述】:我正在使用 Java 编写一个 red5 应用程序 我正在使用 c3p0 进行数据库交互。
似乎在我的 mysql 服务器中的连接超时后,我的应用程序停止工作,并建议配置 autoreconnect=true。
我该怎么做?
这是我用来创建数据源的函数:
private ComboPooledDataSource _createDataSource()
Properties props = new Properties();
// Looks for the file 'database.properties' in TOMCAT_HOME\webapps\RED5_HOME\WEB-INF\
try
FileInputStream in = new FileInputStream(System.getProperty("red5.config_root") + "/database.properties");
props.load(in);
in.close();
catch (IOException ex)
log.error("message: ", ex.getMessage());
log.error("stack trace: " + ExceptionUtils.getFullStackTrace(ex));
return null;
// It will load the driver String from properties
String drivers = props.getProperty("jdbc.drivers");
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
ComboPooledDataSource cpds = new ComboPooledDataSource();
try
cpds.setDriverClass(drivers);
catch (PropertyVetoException ex)
log.error("message: ", ex.getMessage());
log.error("stack trace: " + ExceptionUtils.getFullStackTrace(ex));
return null;
cpds.setJdbcUrl(url);
cpds.setUser(username);
cpds.setPassword(password);
cpds.setMaxStatements(180);
return cpds;
【问题讨论】:
【参考方案1】:创建一个文件c3p0.properties
,该文件必须位于类路径的根目录中:
# c3p0.properties
c3p0.testConnectionOnCheckout=true
有关更多文档,请参阅this。
This post 也可能有帮助。
【讨论】:
有人能解释一下什么是连接签入和签出吗?【参考方案2】:属性 autoreconnect 不是 C3p0 对象的一部分要使用 C3P0 池,建议配置其他选项(如 testConnectionOnCheckout),并使用工厂。
你在这里http://www.mchange.com/projects/c3p0/index.html获得所有C3p0信息和样本
您可以使用外部属性文件,或通过代码添加:例如如何使用数据源创建自定义池数据源并添加自定义选项(C3p0 文档网址中的更多示例)
// Your datasource fetched from the properties file
DataSource ds_unpooled = DataSources.unpooledDataSource("url", "user", "password");
// Custom properties to add to the Source
// See http://www.mchange.com/projects/c3p0/index.html#configuration_properties
Map overrides = new HashMap();
overrides.put("maxStatements", "200"); //Stringified property values work
overrides.put("maxPoolSize", new Integer(50)); //"boxed primitives" also work
// Your pooled datasource with all new properties
ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );
【讨论】:
是的!好多了。 MYSQL 官方强烈建议不要使用 autoreconnect - 它可能会导致损坏问题。抱歉,没有链接 - 几年前看到的。以上是关于java c3p0:如何配置 autoreconnect=true?的主要内容,如果未能解决你的问题,请参考以下文章
Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
如何配置 JavaMelody 以监控 C3p0 数据源中的 Jdbc 连接