Let’s start by adding the dependency for c3p0 in our application’s pom.xml.

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>4.2.7.Final</version>
        </dependency>

Next, let’s edit the hibernate.cfg.xml for configuring the connection pool:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        <hibernate-configuration>
    <session-factory>

        <!--Connection pool settings-->
        <property name="hibernate.c3p0.max_size">5</property>
        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>

        <!--Logging configuration-->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>

        <!--Mapping files-->
        <mapping class="hello.Message"/>

    </session-factory>
</hibernate-configuration>

Let’s discuss about the configuration properties:

  1. hibernate.c3p0.max_size configures the maximum number of connections in the pool
  2. hibernate.c3p0.min_size configures the minimum number of connections in the pool
  3. hibernate.c3p0.timeout specifies the time after which an idle connection is removed from the pool
  4. hibernate.c3p0.max_statements specifies the number of prepared statements that will be cached
  5. hibernate.c3p0.idle_test_period specifies the idle time in seconds before a connection is automatically validated