Как установить расположение файла ehcache.xml в весенней конфигурации на основе Java?

1

У меня есть эта 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();
    }

    //...

}

Как я могу сказать ehcache.xml использовать конкретный файл ehcache.xml?

Теги:
spring
jpa
ehcache

2 ответа

1

Вам нужно изменить 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 для сущностей.

  • 0
    Не могу заставить это работать. Что означает твоя последняя заметка? Я с Sprint 3.2.9 нет класса EhCacheManagerFactoryBean .
  • 0
    @BetaRide Проверьте мой обновленный ответ
Показать ещё 2 комментария
0

В конце концов я смог решить проблему, добавив этот код в класс конфигурации:

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);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню