Java连接池优化 DBCP/C3P0

DBCP   导包:commons-dbcp-1.4.jar  commons-pool-1.5.6.jar

privatestatic DataSource(BasicDataSource) ds = new BasicDataSource();

 

只有使用BasicDataSource对象才能调用下列的方法

        *ds.setUrl(myUrl);

        *dds.setUsername(myUser);

        *//设置密码

        *ds.setPassword(myPassword);

        *//设置最大等待时间

        *ds.setMaxWait(3000);

        *//设置初始看连接数

        *ds.setInitialSize(5);

        *//设置最大连接数

        * ds.setMaxActive(10);

privatestatic DataSource ds = null;

下列代码放在static(静态代码块)

--需要一个properties文件

Propertiesprop = new Properties();

try {

    //找到properties配置文件

prop.load(DBCPUtil.class.getResourceAsStream("/dbcp.properties"));

  //通过basic 工厂进行创建 DataSource

ds = BasicDataSourceFactory.createDataSource(prop);

} catch (Exception e) {

    e.printStackTrace();

    throw new RuntimeException(e);

}
C3P0    导包:c3p0-0.9.1.2.jar

获取连接对象:private static DataSource ds = newComboPooledDataSource();

 

privatestatic DataSource cp = new ComboPooledDataSource();

    ComboPooledDataSource 对象的属性:

       //设置url

       cp.setJdbcUrl(myUrl);

       //设置用户名

       cp.setUser(myUser);

       //设置密码

        cp.setPassword(myPassword);

      

       //设置初始连接数

       cp.setInitialPoolSize(5);

       //设置最大连接数

       cp.setMaxPoolSize(10);

       //设置等待时间

       cp.setCheckoutTimeout(3000);

C3P0关键代码:

privatestatic DataSource ds = new ComboPooledDataSource();

public static Connection getConnection(){

       try {

           Connection conn = ds.getConnection();

           return conn;

       } catch (Exception e) {

           throw new RuntimeException(e);

       }

 }

//使用有参的构造方法-使用命名配置:named-config

private static DataSource empSysds = newComboPooledDataSource("empSysDB");

使用DBCP连接时使用的配置文件代码:

url=jdbc:mysql://localhost:3306/day17?useUnicode=true&characterEncoding=utf-8

username=root

password=1234

driverClassName=com.mysql.jdbc.Driver

 

initialSize=5

maxActive=12

maxWait=5000

使用C3P0使用XML文件进行读取

XML命名规范:c3p0-config.xml

<?xmlversion="1.0" encoding="utf-8"?>

<c3p0-config>

    <!-- 默认配置 -->

    <!-- 属性规则:name值和方法名称相同 -->

<default-config>

<property name="jdbcUrl">jdbc:mysql://localhost:3306/day17?useUnicode=true&amp;characterEncoding=utf-8</property>

    <propertyname="user">root</property>

    <propertyname="password">root</property>

    <propertyname="driverClass">com.mysql.jdbc.Driver</property>

   

    <propertyname="initialPoolSize">5</property>

    <propertyname="maxPoolSize">12</property>

    <propertyname="checkoutTimeout">3000</property>

</default-config>

 

    <!-- 命名配置 -->

  <named-configname="empSysDB">

    <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/empsys?useUnicode=true&amp;characterEncoding=utf-8</property>

    <propertyname="user">root</property>

    <propertyname="password">1234</property>

    <propertyname="driverClass">com.mysql.jdbc.Driver</property>

   

    <propertyname="initialPoolSize">5</property>

    <propertyname="maxPoolSize">14</property>

    <propertyname="checkoutTimeout">3000</property>

  </named-config>

</c3p0-config>

直接连接: Connectionconn = DriverManager.getConnection();

static String myUrl = "jdbc:mysql://localhost:3306/day16?useUnicode=true&characterEncoding=utf-8";

static String myUser = "root";

static String myPassword = "root";

static String dirver= "com.mysql.jdbc.Driver";

使用代理类    implements DataSource

static ObjectnewProxyInstance(

            ClassLoader loader,   类加载器,通用会使用当前类的类加载器

            Class<?>[] interfaces, 指定代理类实现的接口。 通用写被代理类的接口

            InvocationHandler h   代理策略。(代理类需要做什么?) 

            )  用于返回创建好的代理类实例

 

Human proxy =(Human)Proxy.newProxyInstance(

                Boss.class.getClassLoader(),

                new Class[]{Human.class},

new InvocationHandler() {  // 代理策略。(代理类需要做什么?) 

                    /**

                     * proxy: 代理类实例

                     * method: 当前调用的代理类的方法

                     * args: 当前调用代理类方法时传入的参数

                     */

@Override

public Object invoke(Object proxy,Method method, Object[] args)

                            throws Throwable {

                        //调用被代理类对象的sing和dance方法,且抽一半佣金

                        //System.out.println("调用方法");

                       

                        //得到当前方法名称

                        String name =method.getName();

                        //得到参数值

                        double money =(Double)args[0];

                        if("sing".equals(name)){

                            //调用sing方法

                            sb.sing(money/2);

                        }

                        if("dance".equals(name)){

                            sb.dance(money/2);

                        }

                        return null;

                    }

                });


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值