几周前,我开始使用JDBC建立与mysql数据库的连接并发送查询。但是,我注意到它减慢了我的Java应用程序,所以我开始阅读有关连接池的内容。我决定使用c3p0来建立我的连接池。这是我使用的代码:
public static void setUpPool(String id, String pass, String url, String driver) {
cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass(driver);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
cpds.setJdbcUrl(url);
cpds.setUser(id);
cpds.setPassword(pass);
// the settings below are optional -- c3p0 can work with defaults
cpds.setMinPoolSize(3);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);
}
public static Connection getConnection() {
// The DataSource cpds is now a fully configured and usable pooled
// DataSource
try {
return cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
所以我的问题是 1.一旦完成连接,你如何正确摆脱连接? close()就够了吗? 2.我应该使用方法cpds.setCheckoutTimeout(checkoutTimeout)吗? 3.在连接池中维护连接时,我还应该记住什么吗?
此外,我也收到此警告:警告:池大小配置错误,启动3< min 5.使用5作为开始。有谁知道这意味着什么?
提前致谢。
答案 0 :(得分:2)
- 完成后如何正确摆脱连接? close()就够了吗?
醇>
是。只需确保每个Connection都使用try-with-resources或仔细编写的finally子句[仔细编写,以便在关闭(例如,关闭)其他资源时例外,不会阻止Connections关闭()叫]。
- 我应该使用方法cpds.setCheckoutTimeout(checkoutTimeout)吗?
醇>
不,不一定。如果您的应用程序运行良好,则几乎不需要它,因为将立即检出Conections。如果您的应用程序泄漏Connections(即,您有时无法关闭它们),那么缺少签出超时将导致客户端无限期挂起,这很有用。 checkoutTimeout最有用的情况是,由于硬件限制或其他原因,您无法将应用程序配置为始终处理其负载,并且您宁愿告诉客户稍后回来,而不是让他们排队。
- 在连接池中维护连接时,还有什么需要记住的吗?
醇>
是。您应该设置连接测试。这可能就像添加
一样简单cpds.setTestConnectionOnCheckout( true )
到你的setUpPool(...)方法。见here