C3P0连接池

2020-02-18  本文已影响0人  KenChen_939

为什么要使用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));
    }
上一篇下一篇

猜你喜欢

热点阅读