1

我的 Application-context.xml :

<?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>

我已将我的实体注释如下:

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

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

Camel Route Builder中的DSL如下:

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

但我看不出有任何明显的改善。我错过了什么吗?

我的限制是:

  1. 我不能直接在我的代码中使用像 (org.hibernate.annotations.Cache) 这样的 Hibernate,因为我的代码需要符合 JPA。
  2. 我的实体已注释。因此,bean 不能通过 hbm.xml 配置为 Cacheable
4

1 回答 1

-1

使用这个休眠工厂

net.sf.ehcache.hibernate.EhCacheRegionFactory

代替

org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

我在我的项目中使用 ehcache 已经有一段时间了,它肯定会减少。的查询被触发。

如果您有任何问题,请告诉我。

于 2014-04-11T15:37:43.710 回答