簡體   English   中英

如何在基於Spring Java的配置中設置ehcache.xml的位置?

[英]How to set location of ehcache.xml in spring java based configuration?

我的春季項目有基於Java的JPA配置:

@Configuration
@EnableJpaRepositories(basePackageClasses = {PackageMarker.class})
@EnableTransactionManagement(proxyTargetClass = true)
@EnableCaching
public class FooJPAConfig implements CachingConfigurer {

    @Bean
    @Override
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("default")));
        return cacheManager;
    }

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new DefaultKeyGenerator();
    }

    //...

}

如何告訴spring使用特定的ehcache.xml文件?

您需要更改cacheManager才能集成EhCache。 您當前的代碼不會使EhCache輸入圖片。

配置看起來像

@Configuration
@EnableJpaRepositories(basePackageClasses = {PackageMarker.class})
@EnableTransactionManagement(proxyTargetClass = true)
@EnableCaching
public class FooJPAConfig implements CachingConfigurer {

    @Bean
    public EhCacheManagerFactoryBean cacheFactoryBean() {
        EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
        ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("whatever-name.xml"));  //this is where you set the location of the eh-cache configuration file
        return ehCacheManagerFactoryBean;
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        EhCacheCacheManager cacheManager = new EhCacheCacheManager();
        cacheManager.setCacheManager(cacheFactoryBean().getObject());
        return cacheManager;
    }

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new DefaultKeyGenerator();
    }

}

您還必須具有spring-context-support作為對類路徑的依賴項(適用於Spring 3.2)

請注意,以上代碼激活了Spring -EhCache集成,而不是JPA-EhCache集成。 這意味着您可以在實體上使用Spring的@Cacheable而不是EhCache的@Cache

畢竟,我可以通過將以下代碼添加到配置類中來解決問題:

protected static final String EHCACHE_CONFIGURATIONRESOURCENAME_PROPERTY = "net.sf.ehcache.configurationResourceName";

@Bean(name = BEAN_ENTITY_MANAGER_FACTORY)
public EntityManagerFactory entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em = createLocalContainerEntityManagerFactoryBean();

    // ...

    processOptionalProperty(EHCACHE_CONFIGURATIONRESOURCENAME_PROPERTY, em);
    return em.getObject();
}

protected void processOptionalProperty(String propertyName, LocalContainerEntityManagerFactoryBean em) {
    String value = "";// read propertyName from configuration file
    setPropertyValue(propertyName, em, value);
}

protected void setPropertyValue(String propertyName, LocalContainerEntityManagerFactoryBean em, Object value) {
    if (value != null) {
        Map<String, Object> jpaPropertyMap = em.getJpaPropertyMap();
        jpaPropertyMap.put(propertyName, value);
        em.setJpaPropertyMap(jpaPropertyMap);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM