Когда / Как мне установить Ehcache, используемый размером Hibernate программно - PullRequest
0 голосов
/ 15 октября 2018

Я включил кэширование 2-го уровня в Hibernate 4.3.11, добавив:

 config.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
 config.setProperty("hibernate.cache.use_second_level_cache", "true");

к моей конфигурации Hibernate.

Это к моему pom.xml (Не уверен, если это необходимо для pomопределение должно быть таким неловким)

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
      <version>4.3.11.Final</version>
      <exclusions>
          <exclusion>
              <groupId>net.sf.ehcache</groupId>
              <artifactId>ehcache-core</artifactId>
          </exclusion>
      </exclusions>
      </dependency>
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
          <version>2.7.0</version>
      </dependency>

и это для класса, который я хочу кэшировать

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

Но как настроить размер кэша в коде при создании базы данных, егодля меня нецелесообразно использовать Xml-файл, который только усложняет процесс сборки, который я бы предпочел сделать в коде.

Обновление, после создания базы данных из Hibernate, я считаю, что кеши уже созданы

CacheManager.create();
String[] cacheNames = CacheManager.getInstance().getCacheNames();
for(String cacheName:cacheNames)
{
    MainWindow.logger.severe("CacheName:"+cacheName);
    Cache cache = CacheManager.getInstance().getCache(cacheName);
    cache.getCacheConfiguration().setMaxEntriesInCache(1000);
    cache.getCacheConfiguration().setLogging(true);
}

но как я могу повлиять на то, как они создаются, и достаточно ли изменить значения, как я сделал, чтобы обновить.Когда я запускаю, я не вижу отладки или чего-либо, что бы указывало на то, что используется кеш.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете создать подкласс org.hibernate.cache.ehcache.EhCacheRegionFactory и выполнить любую настройку кэша вручную, а затем указать Hibernate использовать вашу собственную фабрику кэша с:

Configuration.setProperty("hibernate.cache.region.factory_class", "my.cache.FactoryClass");

См .: http://www.ehcache.org/documentation/2.7/integrations/hibernate.html#set-the-hibernate-cache-provider-programmatically-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...