美文网首页
C3P0连接池

C3P0连接池

作者: KenChen_939 | 来源:发表于2020-02-18 19:50 被阅读0次

    为什么要使用C3P0连接池?

    一般我们在项目中操作数据库的时候,都是每次需要操作数据库的时候就建立一个连接,操作完成后释放连接。也就是说他在每次操作的时候都需要自己连接数据库,还需要关闭数据库,性能太差了。若使用C3P0连接池来池化连接,随时取用,则平均每次取用只需要10-20毫秒。这在高并发随机访问数据库的时候对效率的提升有很大帮助。

    C3P0连接池会根据你的配置来初始化N个数据库连接,空闲T时间后连接过期又会自动新建K个连接使得连接池总有空闲的数据库连接等待被取用。我们只需通过dataSourse.getConnection()即可从线程池中取用一个已经连接好的空闲连接,执行数据库操作。然后“断开”(放回)这个连接,把这个连接的使用权放回连接池。真正的数据库连接的创建与释放是由C3P0在后台自动完成的,我们花的只是取用与释放占用权的时间。

    范例:在src下建立一个database.properties文件

    db.driver=com.mysql.cj.jdbc.Driver
    db.url=jdbc:mysql://www.cjlly.com:3306/chen
    db.user=user_chen
    db.password=123456
    pool.max=100
    pool.min=10
    pool.init=10
    pool.idle=20
    

    而现在需要在spring-config.xml文件中取得这些配置的内容。
    范例:修改xml文件,使用C3P0数据库连接池

    <context:property-placeholder location="classpath:database.properties"/>
    <!--    在本程序之中设置要导入的资源文件路径,直接通过classpath加载。—>
    
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
    <!--        此时表示jdbcTemplate与Datasource就通过配置文件搭配完成-->
        </bean>
    
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${db.driver}"/>
            <property name="jdbcUrl" value="${db.url}"/>
            <property name="password" value="${db.password}"/>
            <property name="user" value="${db.user}"/>
            <property name="maxPoolSize" value="${pool.max}"/>         <!-- 最大的可用连接数 -->
            <property name="initialPoolSize" value="${pool.init}"/>         <!--初始化连接数 -->
            <property name="minPoolSize" value="${pool.min}"/>             <!--最小维持的连接数 -->
            <property name="maxIdleTime" value="${pool.idle}"/>         <!--最大的等待连接 -->
        </bean>
    

    现在就可以正常使用C3P0连接池了:

        public static void main(String[] args) throws Exception {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
            INewsDAO dao = ctx.getBean("newsDAOImpl", NewsDAOImpl.class);
            News vo = new News();
            vo.setTitle("天气炎热");
            vo.setContent("今天注意身体");
            vo.setPubdate(new Date());
            System.out.println(dao.doCreate(vo));
        }
    

    相关文章

      网友评论

          本文标题:C3P0连接池

          本文链接:https://www.haomeiwen.com/subject/njxszctx.html