北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

JPA2.0和Spring的集成配置方式

Posted on 2012-11-09 22:47  CN.programmer.Luxh  阅读(1767)  评论(1编辑  收藏  举报

  JPA2.0和Spring集成,persistence.xml文件可以需要,也可以不需要。

  需要persistence.xml的只需做如下简单的配置:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
            
            <persistence-unit name="APP" transaction-type="RESOURCE_LOCAL"/>
            
</persistence>

  Spring的配置如下:

<!-- 数据源 -->
        <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
            <!-- 数据库驱动 -->
            <property name="driverClass" value="${jdbc.driverClassName}" />
            <!-- 相应驱动的jdbcUrl-->
            <property name="jdbcUrl" value="${jdbc.url}" />
            <!-- 数据库的用户名 -->
            <property name="username" value="${jdbc.username}" />
            <!-- 数据库的密码 -->
            <property name="password" value="${jdbc.password}" />
            <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
            <property name="idleConnectionTestPeriod" value="${BoneCP.idleConnectionTestPeriod}" />
            <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
            <property name="idleMaxAge" value="${BoneCP.idleMaxAge}" />
            <!-- 每个分区最大的连接数 -->
            <property name="maxConnectionsPerPartition" value="${BoneCP.maxConnectionsPerPartition}" />
            <!-- 每个分区最小的连接数 -->
            <property name="minConnectionsPerPartition" value="${BoneCP.minConnectionsPerPartition}" />
            <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定 -->
            <property name="partitionCount" value="${BoneCP.partitionCount}" />
            <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->
            <property name="acquireIncrement" value="${BoneCP.acquireIncrement}" />
            <!-- 缓存prepared statements的大小,默认值:0 -->
            <property name="statementsCacheSize" value="${BoneCP.statementsCacheSize}" />
            <!-- 每个分区释放链接助理进程的数量,默认值:3,除非你的一个数据库连接的时间内做了很多工作,不然过多的助理进程会影响你的性能 -->
            <property name="releaseHelperThreads" value="${BoneCP.releaseHelperThreads}" />
       </bean>
       
       <!-- JPA实体管理器工厂 -->
       <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
                    <property name="dataSource" ref="dataSource"/>
                    <property name="persistenceProvider" ref="persistenceProvider"/>
                    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>  
                  <property name="jpaDialect" ref="jpaDialect"/>  
                    
                    <property name="packagesToScan" value="cn.luxh.app.entity"/>
                    
                    <property name="jpaProperties">
                        <props>
                            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                            <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
                            <prop key="hibernate.max_fetch_depth">3</prop>
                            <prop key="hibernate.jdbc.fetch_size">18</prop>
                            <prop key="hibernate.jdbc.batch_size">10</prop>
                            <prop key="hibernate.hbm2ddl.auto">update</prop>
                            <prop key="hibernate.show_sql">true</prop>
                            <prop key="hibernate.format_sql">true</prop>
                            <prop key="javax.persistence.validation.mode">none</prop>
                        </props>
                    </property>
       </bean>
       <!-- 用于指定持久化实现厂商类 -->
       <bean id="persistenceProvider" class="org.hibernate.ejb.HibernatePersistence"/>
       <!-- 用于设置JPA实现厂商的特定属性 -->
       <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">  
           <property name="database" value="MYSQL"/>  
       </bean>  
       <!-- 用于指定一些高级特性 -->
       <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>  
       
       <!-- 事务管理器 -->  
       <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
           <property name="entityManagerFactory" ref="entityManagerFactory" />  
       </bean> 
        

  这样应该是JPA2.0和Spring比较好的整合。

  如果不需要persistence.xml文件,就把它删掉。