hibernate配置文件及连接池配置
hibernate.cfg.xml配置文件的配置:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<hibernate-configuration>
<session-factory>
<!-- 数据库链接 -->
<property name="connection.url">url</property>
<!-- 是否设置连接编码 -->
<property name="connection.useUnicode">true</property>
<!-- 设置连接编码 -->
<property name="connection.characterEncoding">UTF-8</property>
<!-- 用户名 -->
<property name="connection.username">user</property>
<!-- 密码 -->
<property name="connection.password">pass</property>
<!-- 驱动 -->
<property name="connection.driver_class">Driver</property>
<!-- 数据库方言 -->
<property name="dialect">dialect</property>
<!-- 是否打印sql语句 -->
<property name="show_sql">false</property>
<!-- 打印sql语句时是否格式化为格式良好的 -->
<property name="format_sql">false</property>
<!-- hibernate默认连接池最大上限 -->
<property name="hibernate.connection.pool_size">100</property>
<!-- Hibernate Reference Documentation 3.3.1解释如下: -->
<!-- Automatically validate or export schema DDL to the database when the SessionFactory is created. -->
<!-- With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. -->
<!-- eg. validate | update | create | create-drop -->
<!-- 其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。 -->
<!-- create: -->
<!-- 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 -->
<!-- create-drop : -->
<!-- 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 -->
<!-- update: -->
<!-- 最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 -->
<!-- validate : -->
<!-- 每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 -->
<property name="hibernate.hbm2ddl.auto" value="update" />
<!-- 数据库链接 -->
<property name="connection.url">url</property>
<!-- 是否设置连接编码 -->
<property name="connection.useUnicode">true</property>
<!-- 设置连接编码 -->
<property name="connection.characterEncoding">UTF-8</property>
<!-- 用户名 -->
<property name="connection.username">user</property>
<!-- 密码 -->
<property name="connection.password">pass</property>
<!-- 驱动 -->
<property name="connection.driver_class">Driver</property>
<!-- 数据库方言 -->
<property name="dialect">dialect</property>
<!-- 是否打印sql语句 -->
<property name="show_sql">false</property>
<!-- 打印sql语句时是否格式化为格式良好的 -->
<property name="format_sql">false</property>
<!-- hibernate默认连接池最大上限 -->
<property name="hibernate.connection.pool_size">100</property>
<!-- Hibernate Reference Documentation 3.3.1解释如下: -->
<!-- Automatically validate or export schema DDL to the database when the SessionFactory is created. -->
<!-- With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. -->
<!-- eg. validate | update | create | create-drop -->
<!-- 其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。 -->
<!-- create: -->
<!-- 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 -->
<!-- create-drop : -->
<!-- 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 -->
<!-- update: -->
<!-- 最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 -->
<!-- validate : -->
<!-- 每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 -->
<property name="hibernate.hbm2ddl.auto" value="update" />
<!-- 连接断开问题 如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.-->
<property name="connection.is-connection-validation-required">true</property>
<property name="connection.autoReconnect">true</property>
<property name="connection.autoReconnectForPools">true</property>
<!-- c3p0连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">43200</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">1200</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">true</property>
<!-- (A)proxool方式配置连接池,连接池的参数要看proxoolConf.xml配置文件
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">proxoolPool</property>
<property name="hibernate.proxool.xml">proxoolConf.xml</property>
-->
<property name="connection.is-connection-validation-required">true</property>
<property name="connection.autoReconnect">true</property>
<property name="connection.autoReconnectForPools">true</property>
<!-- c3p0连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">43200</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">1200</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">true</property>
<!-- (A)proxool方式配置连接池,连接池的参数要看proxoolConf.xml配置文件
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">proxoolPool</property>
<property name="hibernate.proxool.xml">proxoolConf.xml</property>
-->
<!-- (B)JNDI方式的Hibernate连接池配置,需要配置tomcat下context.xml,项目下的web.xml
<property name="connection.datasource">java:comp/env/jdbc/zhang</property>
-->
</session-factory>
<property name="connection.datasource">java:comp/env/jdbc/zhang</property>
-->
</session-factory>
</hibernate-configuration>
proxoolConf.xml配置文件的配置,与hibernate.cfg.xml配置文件中(A)对应,该配置文件主要用于配置proxool连接池:
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<!--连接池的别名 -->
<alias>DBPool</alias>
<!-- proxool只能管理由自己产生的连接 -->
<driver-url>url</driver-url>
<!-- JDBC驱动程序 -->
<driver-class>Driver</driver-class>
<driver-properties>
<property name="user" value="" />
<property name="password" value="" />
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 -->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 最少保持的空闲连接数 -->
<prototype-count>5</prototype-count>
<!-- 最小连接数 -->
<minimum-connection-count>10</minimum-connection-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 -->
<maximum-new-connections>20</maximum-new-connections>
</proxool>
</something-else-entirely>
<something-else-entirely>
<proxool>
<!--连接池的别名 -->
<alias>DBPool</alias>
<!-- proxool只能管理由自己产生的连接 -->
<driver-url>url</driver-url>
<!-- JDBC驱动程序 -->
<driver-class>Driver</driver-class>
<driver-properties>
<property name="user" value="" />
<property name="password" value="" />
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 -->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 最少保持的空闲连接数 -->
<prototype-count>5</prototype-count>
<!-- 最小连接数 -->
<minimum-connection-count>10</minimum-connection-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 -->
<maximum-new-connections>20</maximum-new-connections>
</proxool>
</something-else-entirely>
context.xml配置文件的配置,与hibernate.cfg.xml配置文件中(B)对应,该配置文件为tomcat下的配置文件,主要用于配置JNDI方式的连接池:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Loader delegate="true" />
<Resource
maxIdle="100"
maxActive="100"
password="root"
username="root"
url="jdbc:mysql://localhost:3306/test"
driverClassname="com.mysql.jdbc.Driver"
type="javax.sql.DataSource"
auth="Container"
name="jdbc/zhang"/>
</Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Loader delegate="true" />
<Resource
maxIdle="100"
maxActive="100"
password="root"
username="root"
url="jdbc:mysql://localhost:3306/test"
driverClassname="com.mysql.jdbc.Driver"
type="javax.sql.DataSource"
auth="Container"
name="jdbc/zhang"/>
</Context>
web.xml配置文件的配置,与hibernate.cfg.xml配置文件中(B)对应,该配置文件为项目下的web.xml文件,主要用于配置JNDI方式的连接池,与context.xml一起使用:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<resource-ref>
<res-ref-name>jdbc/zhang</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<resource-ref>
<res-ref-name>jdbc/zhang</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
后记:c3p0和proxool都需要第三方jar包,c3p0-0.9.1.jar和proxool-0.9.1.jar,JNDI数据库连接池依赖于tomcat容器,所以测试的时候需要部署项目测试。