Class CacheConfiguration

java.lang.Object
com.github._1c_syntax.bsl.languageserver.infrastructure.CacheConfiguration

@Configuration @EnableCaching public class CacheConfiguration extends Object
Spring-конфигурация кэширования.

EhCache-менеджер (ehcacheManager) — общий и cache-agnostic: каждый модуль регистрирует свой персистентный кэш через EhcacheRegistrar, а ehcacheCacheManager оборачивает их в Spring-CacheManager. Для остальных кэшей (например, code lens) используется Caffeine с хранением в памяти.

  • Constructor Details

    • CacheConfiguration

      public CacheConfiguration()
  • Method Details

    • cacheManager

      @Bean @Primary public CacheManager cacheManager(Caffeine<Object,Object> caffeine)
      Основной менеджер кэша, использующий Caffeine для кэширования в памяти.

      Помечен как @Primary, поэтому используется для всех кэшей по умолчанию, если не указан явно другой менеджер кэша (например, ehcacheCacheManager для typoCache).

    • caffeineConfig

      @Bean public Caffeine<Object,Object> caffeineConfig()
    • commonModuleCache

      Ограниченный кэш резолва общего модуля по имени для ServerContext.findCommonModule.

      Workspace-scoped: один экземпляр на воркспейс (резолв зависит от конфигурации воркспейса, поэтому общий singleton-кэш смешивал бы воркспейсы). Ограничен по размеру, т.к. кэшируются и промахи, а ключи — имена-идентификаторы исходного кода.

    • ehcacheManager

      @Bean(destroyMethod="close") public CacheManager ehcacheManager(CachePathProvider cachePathProvider, @Value("${app.cache.basePath}") String basePath, @Value("${app.cache.fullPath}") String fullPath, List<EhcacheRegistrar> registrars)
      Общий менеджер EhCache с персистентным хранением на диске.

      Cache-agnostic: каждый кэш объявляется отдельным EhcacheRegistrar. Настроен программно, без XML; при закрытии Spring-контекста вызывается close(). Кэш размещается в каталоге пользователя (путь переопределяется свойством app.cache.fullPath). При запуске нескольких экземпляров используются каталоги с суффиксами @1, @2 и т.д.; если все заблокированы (более 10 экземпляров), используется кэш в памяти без персистентности.

    • ehcacheCacheManager

      @Bean public CacheManager ehcacheCacheManager(CacheManager ehcacheManager, List<EhcacheRegistrar> registrars)
      Spring-CacheManager поверх кэшей общего EhCache-менеджера.

      На него ссылаются потребители через @Cacheable(cacheManager = "ehcacheCacheManager"), когда нужен персистентный кэш, а не @Primary Caffeine.