c3p0连接池的学习

c3p0的学习 学习 学习 !

     首先c3p0的基本了解,在之前的web项目学习中都是直接使用jdbc的 DriverManager进行oracle数据库的连接,每次执行操作都会建立一个新的连接,在操作完成后,通过判断释放连接,但是如果处于高并发的情况下,就可能会造成服务器崩溃的后果,因为大量的资源同一时间得不到释放;以上是我自己对普通连接的学习和看法,采用c3p0连接池后,连接池会控制连接池内的连接对象数,以下是c3p0的xml配置文件:

 1 xml version="1.0" encoding="UTF-8"?>
 2 DOCTYPE xml>
 3 <c3p0-config>
 4     <named-config name="mvcApp">
 5         <property name="user">despairproperty>
 6         <property name="password">123456property>
 7         <property name="driverClass">oracle.jdbc.driver.OracleDriverproperty>
 8         <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orclproperty>
 9         
10         
11         <property name="acquireIncrement">2property>
12         
13         <property name="initialPoolSize">5property>
14         
15         <property name="minPoolSize">1property>
16         
17         <property name="maxPoolSize">5property>
18         
21         <property name="maxStatements">5property>
22         
23         <property name="maxStatementsPerConnection">5property>
24     named-config>
25 c3p0-config>

 

     从上面的配置文件中基本就可以了解c3p0是个什么东东了,简而言之,c3p0连接池不管是否有连接请求,先在连接池中建立几个连接对象即初始化条数,当有连接请求时,直接分配,如果经过多次创建新的连接对象且连接数已经达到最大值时,仍有请求进入的话,新的请求将需要等待,另外请求的对象可以重复使用这个连接对象。

     然后,我就开始了c3p0的简单代码学习:

     使用c3p0需要到c3p0官网下载需要的jar包

 第一个和第三个,第三个是为了获得datasourse,即连接池。

还可以加入

commons-dbutils 是 Apache提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

新建一个emp员工类

 1 import java.util.UUID;
 2 /**
 3  * 员工
 4  * @author 27533
 5  */
 6 public class Emp {
 7     private String id;//编号
 8     private String username;//姓名
 9     private double salary;//薪水
10     public Emp() {}
11     public Emp(String username,double salary){
12         this.username=username;
13         this.salary=salary;
14     }
15     public String getId() {
16         return UUID.randomUUID().toString();
17     }
18     public void setId(String id) {
19         this.id = id;
20     }
21     public String getUsername() {
22         return username;
23     }
24     public void setUsername(String username) {
25         this.username = username;
26     }
27     public double getSalary() {
28         return salary;
29     }
30     public void setSalary(double salary) {
31         this.salary = salary;
32     }
33     @Override
34     public String toString() {
35         // TODO Auto-generated method stub
36         return "id为"+id+" username为"+username+" salary为"+salary;
37     }
38 }

 

然后是工具类

 1 import com.mchange.v2.c3p0.ComboPooledDataSource;
 2 /**
 3  * 工具类
 4  * @author 27533
 5  */
 6 public class JDBCUtil {
 7     private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
 8     public static ComboPooledDataSource getdaDataSource() {
 9         return dataSource;
10     }
11 }

 

 然后是dao类

 1 import org.apache.commons.dbutils.QueryRunner;
 2 /**
 3  * 员工管理中的持久层
 4  * @author 27533
 5  */
 6 public class EmpDao {
 7 /**
 8  * 增加员工
 9  */
10     public void add(Emp emp)throws Exception{
11         QueryRunner runner = new QueryRunner(JDBCUtil.getdaDataSource());
12         String sql = "insert into emps(id,username,salary) values(?,?,?)";
13         Object[] params = {emp.getId(),emp.getUsername(),emp.getSalary()};
14         runner.update(sql, params);    
15     }    
16     /**
17      * 测试
18      * @throws Exception
19      */
20     public static void main(String[] args) throws Exception{
21         EmpDao e = new EmpDao();
22         e.add(new Emp("张三",10.3D));
23     }
24 }

      很不幸,第一次出现了问题,

警告: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@5c849077 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 

中文大概是:
警告:COM.mchange.V2.资源池.basicresourcepool $ scatteredacquiretask @ 5c849077 --获取尝试失败!!!清算等待取得。在试图获取所需的新资源时,我们未能成功地超过允许的最大尝试次数(30)。最后一次尝试尝试异常:

 正在解决。。。

 基本原理就是这样 。解决之后补充,以上就是c3p0的学习。。。。。。。

转载于:https://www.cnblogs.com/YsirSun/p/7821516.html

你可能感兴趣的:(c3p0连接池的学习)