2014-04-11 4 views
1

내 응용 프로그램의 context.xml :최대 절전 모드 캐싱 성능이 향상되지 않습니다

import javax.persistence.Cacheable; 
import org.hibernate.annotations.Cache; 

@Cacheable 
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_ONLY) 

낙타 경로 빌더의 DSL은 다음과 같다 : 다음과 같이 내 실체를 주석 한

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
.. 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    .. 
default-autowire="byName"> 

<import resource="jms-context.xml" /> 

<context:property-placeholder location="classpath:res.properties" /> 

<context:annotation-config /> 
<context:component-scan base-package="..." /> 


<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="PROPAGATION_REQUIRED" 
    class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager" ref="transactionManager" /> 
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" /> 
</bean> 


<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close"> 
    <property name="driverClass" value="${jdbc.database.driverClass}" /> 
    <property name="jdbcUrl" value="${jdbc.database.url}" /> 
    <property name="user" value="${jdbc.database.username}" /> 
    <property name="password" value="${jdbc.database.password}" /> 
    ... 
</bean> 

<bean id="GLOBAL" class="oracle.jdbc.pool.OracleDataSource" 
    destroy-method="close" p:URL="${jdbc.database.url}" p:user="${jdbc.database.username}" 
    p:password="${jdbc.database.password}"> 
    <property name="connectionCachingEnabled" value="true" /> 
    <property name="connectionCacheProperties"> 
     <util:map> 
      <entry key="MinLimit" value="${jdbc.database.minLimit}" /> 
      <entry key="MaxLimit" value="${jdbc.database.maxLimit}" /> 
      <entry key="InitialLimit" value="${jdbc.database.initialLimit}" /> 
     </util:map> 
    </property> 
</bean> 

<bean id="global-tm" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="global-em" /> 
    <property name="dataSource" ref="GLOBAL" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="global-em" /> 
</bean> 

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="showSql" value="false" /> 
    <property name="generateDdl" value="false" /> 
    <property name="databasePlatform" value="${jpa.hibernate.dialectClass}" /> 
</bean> 

<bean id="global-em" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:packagesToScan="..." p:dataSource-ref="pooledDataSource" 
    p:jpaVendorAdapter-ref="jpaVendorAdapter"> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="hibernate.temp.use_jdbc_metadata_defaults" value="false" /> 
      <entry key="hibernate.cache.region.factory_class" 
       value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" /> 
      <entry key="hibernate.cache.use_second_level_cache" value="true" /> 
      <entry key="hibernate.cache.use_query_cache" value="true" /> 
      <entry key="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE" /> 
      <entry key="hibernate.generate_statistics" value="true" /> 
     </map> 
    </property> 
</bean> 

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 


</beans> 

from(fromURI) 
    ... 
    .policy(required) 
    .bean(bean1, "proc") 
     ... 
     .recipientList().method(recipientList, "endPoint") 
    ... 
    .end(); 

하지만 눈에 띄는 개선점을 발견 할 수 없었습니다. 내가 놓친 게 있니?

내 제약 조건은 다음과 같습니다 내 코드는 JPA 준수에 필요로

  1. 내 코드에서 직접 (org.hibernate.annotations.Cache)처럼 최대 절전 모드 사용할 수 없습니다.
  2. 내 항목에 주석이 달립니다. 그래서, 콩은 hbm.xml
+0

당신은 ('org.hibernate.annotations.Cache') _와 같은 하이버 네이트를 사용할 수 없다고하지만 _ 당신은 _ 그렇습니다. 귀하의 예를 정확하게 보여 주려고하는지 설명해 주시겠습니까? –

+0

@BoristheSpider, 혼란스럽게 생각합니다. 심지어 나는 Hibernate를 직접 사용해 보았지만 아무 소용이 없었다. Spring-JPA 기본 설정을 사용해야합니다. 최대 절전 모드 일 것입니다 –

답변

-1

사용

net.sf.ehcache.hibernate.EhCacheRegionFactory이 최대 절전 모드 공장

대신

org.hibernate.cache를 통해 캐시 가능을 구성 할 수 없습니다 .ehcache.SingletonEhCacheRegionFactory

나는 내 프로젝트에서 ehcache를 사용하고 있었으며 확실히 no.를 줄였다. 해고 된 쿼리 중

문제가 있으면 알려주세요.

+0

답변 해 주셔서 감사합니다. 나는 Hibernate 4.1.12. 최종을 사용하고 있기 때문에; http://ehcache.org/documentation/user-guide/hibernate#Configure-Ehcache-as-the-Second-Level-Cache-Provider는 net.sf.ehcache.hibernate 패키지 대신 org.hibernate.cache.ehcache를 권장합니다. 물론 나는 최대한 빨리 org.hibernate.cache.ehcache.EhCacheRegionFactory를 시도 할 것이다. 나에게 너의 생각을 알려줘. –

+0

이 두 가지의 차이는 'SingletonEhCacheRegionFactory'가 생성 된 각 SessionFactory에 대한 _same_ cache 인스턴스를 반환하는 반면'EhCacheRegionFactory'는 각 SessionFactory에 대해 _different_ cache 인스턴스를 반환한다는 것입니다. 당신이 하나 또는 다른 다른 영향을 사용하든, 사물은 캐시되고 ** 속도는 아닙니다. –