1)maven中配置
添加Hibernate集成的c3p0jar包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.6.Final</version>
</dependency>
2)hibernate.cfg.xml
<property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">2</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">false</property>
3)为何要使用数据库连接池
1. 数据库连接实质上就是TCP连接,建立连接和撤销连接的开销很大(3次握手)
2. 如果不使用数据库连接池,那么操作一次数据库关闭session,就要创建一个连接并撤销
3. 使用数据库连接池,可以一次性申请若干个数据库连接,一个线程要使用数据库连接,那么就向数据库连接池申请。
如果申请到,则使用,并在使用完成之后归还给连接池;
如果没有申请到,且连接池中连接数小于连接池最大数目,那么就再建立连接(一次建立数目可以设置);
如果没有申请到,且连接池中连接数已经等于最大数目,那么线程阻塞,等待其他线程归还数据库连接