Как запретить Spring Boot Devtools кэшировать несколько файлов

Я использую весенний кеш для кеширования результатов моей базы данных, когда весенний кеш включен вместе с инструментами разработки весенней загрузки, мы получаем странное исключение ClassCastException из-за известного limit - это инструменты Spring Dev.

Теперь я хочу исключить класс, содержащий кеш, из автоматического перезапуска или перезагрузки. Как мы можем этого добиться?


person rajadilipkolli    schedule 29.06.2016    source источник


Ответы (2)


Вы можете легко обойти эту проблему.

Во-первых, вы можете полностью отключить кеширование, просто добавив в свою конфигурацию следующее:

spring.cache.type=none

Вы можете добавить это как системное свойство или в конфигурацию запуска вашей IDE, чтобы оно применялось только тогда, когда вы используете devtools на своем компьютере.

Затем вы можете переключиться на реализацию диспетчера кеша, которая не сериализует содержимое объекта. Один из способов добиться этого - создать в памяти кеш-менеджер с определенным профилем:

@Configuration
@Profile("dev")
public DevConfig {

  public CacheManager cacheManager() {
    return new SimpleCacheManager();
  }
}

А затем включите профиль разработчика (снова через свойство или в конфигурации запуска вашей IDE). Теперь это может сработать, если у вас сложные правила выселения.

Наконец, вы можете исправить основную проблему, добавив (включая) библиотеку кеширования (компонент, отвечающий за сериализацию) в загрузчик классов приложения. См. эту ссылку подробнее.

person Stephane Nicoll    schedule 01.07.2016

Технология перезапуска, предоставляемая Spring Boot, работает с использованием двух загрузчиков классов. Классы, которые не меняются (например, из сторонних jar-файлов), загружаются в базовый загрузчик классов. Классы, которые вы активно разрабатываете, загружаются в загрузчик классов перезапуска. При перезапуске приложения загрузчик классов перезапуска отбрасывается и создается новый. Этот подход означает, что перезапуск приложения обычно выполняется намного быстрее, чем «холодный запуск», поскольку базовый загрузчик классов уже доступен и заполнен.

По умолчанию любой открытый проект в вашей среде IDE загружается с помощью загрузчика классов «перезапуска», а любой обычный файл .jar загружается с помощью «базового» загрузчика классов. Если вы работаете над многомодульным проектом, и не каждый модуль импортируется в вашу среду IDE, вам может потребоваться настройка. Для этого вы можете создать файл META-INF / spring-devtools.properties.

Файл spring-devtools.properties может содержать свойства с префиксом restart.exclude и restart.include. Элементы include - это элементы, которые должны быть загружены в загрузчик классов «перезапуска», а элементы exclude - это элементы, которые должны быть помещены в загрузчик классов «базовый». Значение свойства - это шаблон регулярного выражения, который применяется к пути к классам, как показано в следующем примере:

restart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\.]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\.]+\.jar

см. Документация по инструментам разработчика Spring boot

person ejazazeem    schedule 09.08.2020