数据库连接池技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库连接池技术相关的知识,希望对你有一定的参考价值。
1.数据库连接池
dbcp
apache的产品
核心的类 :BasicDataSource
commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
http://commons.apache.org/proper/commons-pool/download_pool.cgi
c3p0
spring/hibernet
目前应用最广泛的。
有空闲自动回收链接功能
异步执行。
https://sourceforge.net/projects/c3p0/
核心的类:ComboPooledDataSource
配置文件:必须叫做 c3p0-config.xml
druid
tomcat配置连接池
dbcp配置数据库连接池,需要导入两个jar包分别是commons-pool-1.6.jar和commons-dbcp-1.4.jar
//方法一,通过字符串来设置连接参数
public class JDBCUtil1 { private static BasicDataSource ds = null; private static String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; private static String user="root"; private static String password="123123"; private static String driverClass="com.mysql.jdbc.Driver"; static{ ds = new BasicDataSource(); //最基本的链接配置 ds.setUrl(url); ds.setUsername(user); ds.setPassword(password); ds.setDriverClassName(driverClass); //初始化连接数 ds.setInitialSize(5); //最大连接数 ds.setMaxActive(10); //最大等待时间 ds.setMaxWait(3000); } public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }
//方法二通过配置文件读取连接参数
public class JDBCUtil { private static BasicDataSource ds = null; static{ //properties中的key不能乱写 //通过BasicDataSource的set方法来得到key的写法,去掉set,首字母小写即可。 Properties prop = new Properties();
//读取配置文件,配置文件在下面 InputStream inputStream = JDBCUtil.class.getResourceAsStream("/db.properties"); try { prop.load(inputStream); ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }
配置文件名db.properties
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 username=root password=123123 driverClassName=com.mysql.jdbc.Driver initialSize=5 maxActive=10 maxWait=3000
C3P0配置数据库连接池,需要导入c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar
配置方式一:
public class JDBCUtil1 { private static ComboPooledDataSource ds = null; private static String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; private static String user="root"; private static String password="123123"; private static String driverClass="com.mysql.jdbc.Driver"; static{ ds = new ComboPooledDataSource(); //基本配置 ds.setJdbcUrl(url); ds.setUser(user); ds.setPassword(password); try { ds.setDriverClass(driverClass); } catch (PropertyVetoException e) { e.printStackTrace(); } ds.setInitialPoolSize(5); ds.setMaxPoolSize(10); //设置超时时间 ds.setCheckoutTimeout(3000); } public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }
配置方式二:通过读取配置文件c3p0-config.xml,配置文件必须命名唯一,只能叫c3p0-config.xml
配置文件信息
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 默认配置 --> <default-config> <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property> <property name="user">root</property> <property name="password">123123</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> <property name="checkoutTimeout">3000</property> </default-config> <!-- --> <named-config name="intergalactoApp"> <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property> <property name="user">root</property> <property name="password">123123</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="initialPoolSize">10</property> <property name="maxPoolSize">20</property> <property name="checkoutTimeout">5000</property> </named-config> </c3p0-config>
代码示范
public class JDBCUtil { private static ComboPooledDataSource ds = null; static { // 读取的是default-config // ds = new ComboPooledDataSource(); // 读取的是<named-config name="intergalactoApp"> ds = new ComboPooledDataSource("intergalactoApp"); } public static Connection getConnection() { try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }
以上是关于数据库连接池技术的主要内容,如果未能解决你的问题,请参考以下文章