标签:使用 下载 config 之间 query rman 最小 程序 用户名
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">despair</property> 6 <property name="password">123456</property> 7 <property name="driverClass">oracle.jdbc.driver.OracleDriver</property> 8 <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property> 9 <!-- user:用户名,password:密码,driverClass为ORACLE数据库驱动,jdbcUrl是连接数据库的URL --> 10 <!--连接池中的连接耗尽时c3p0再次获取的连接数目 --> 11 <property name="acquireIncrement">2</property> 12 <!--初始化时连接池存在的连接数,取值应在minPoolSize与maxPoolSize之间 --> 13 <property name="initialPoolSize">5</property> 14 <!--连接池中最小连接数 --> 15 <property name="minPoolSize">1</property> 16 <!--连接池中最大连接数 --> 17 <property name="maxPoolSize">5</property> 18 <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。 19 但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 20 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。默认为0 --> 21 <property name="maxStatements">5</property> 22 <!--maxStatementsPerConnection 连接池内单个连接所拥有的最大缓存statements数。默认为0 --> 23 <property name="maxStatementsPerConnection">5</property> 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的学习。。。。。。。
标签:使用 下载 config 之间 query rman 最小 程序 用户名
原文地址:http://www.cnblogs.com/YsirSun/p/7821516.html