Статьи

Spring Boot — Как пропустить кэш шаблона thyemeleaf, js, css и т. Д., Чтобы обойти перезагрузку сервера каждый раз

Преобразователь шаблонов по умолчанию, зарегистрированный в автоконфигурации Spring Boot для ThyemeLeaf, основан на classpath, что означает, что он загружает шаблоны и другие статические ресурсы из скомпилированных ресурсов, т. Е. / Target / classes / **.

Шаблон кеша

Чтобы загрузить изменения в ресурсы (HTML, JS, CSS и т. Д.), Мы можем

  • Перезапускайте приложение каждый раз, что, конечно, не очень хорошая идея!
  • Перекомпилируйте ресурсы, используя CTRL + F9 на IntelliJ или (CTRL + SHIFT + F9, если вы используете eclipse keymap) или просто щелкните правой кнопкой мыши и выберите Compile
  • Или лучшее решение, как описано ниже!

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

См. Фрагмент из DefaultTemplateResolverConfiguration # defaultTemplateResolver

1
2
3
4
5
@Bean
public SpringResourceTemplateResolver defaultTemplateResolver() {
 SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
 resolver.setApplicationContext(this.applicationContext);
 resolver.setPrefix(this.properties.getPrefix());

Где префикс свойства по умолчанию равен «classpath: / template /». Смотрите фрагмент ThymeleafProperties # DEFAULT_PREFIX

1
public static final String DEFAULT_PREFIX = "classpath:/templates/";

Решение:

Spring Boot позволяет нам переопределить свойство «spring.thymeleaf.prefix», чтобы оно указывало на исходную папку «src / main / resources / templates /» вместо стандартной «classpath: / templates /», как показано ниже.

В файле application.yml | properties:

1
2
3
spring:
    thymeleaf:
        prefix: file:src/main/resources/templates/  #directly serve from src folder instead of target

Это скажет среде выполнения не заглядывать в цель / папку. И вам не нужно перезагружать сервер каждый раз, когда вы обновляете HTML-шаблон в нашем src / main / resources / template

Как насчет файлов JavaScript / CSS?

Вы можете продолжить и обновить файл «spring.resources.static-location», чтобы он указывал на вашу папку статических ресурсов (где вы храните js / css, изображения и т. Д.)

1
2
3
4
spring:
    resources:
        static-locations: file:src/main/resources/static/ #directly serve from src folder instead of target        cache:
          period: 0

Полный код:

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

Вот полные фрагменты кода, основанные на том, что мы только что описали!

Структура проекта:

pom.xml:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="UTF-8"?>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>my-sample-app</artifactId>
    <packaging>jar</packaging>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 
    <properties>
        <java.version>11</java.version>
    </properties>
 
    <dependencies>
        <!-- the basic dependencies as described on the blog -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
 
    <build>
        <finalName>${build.profile}-${project.version}-app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
    <profiles>
 
        <!-- Two profiles -->
 
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
                <build.profile>dev<build.profile>
            </properties>
        </profile>
 
        <profile>
            <id>prod</id>
            <properties>
                <spring.profiles.active>prod</spring.profiles.active>
                <build.profile>prod<build.profile>
            </properties>
        </profile>
 
    </profiles>
 
</project>

Файлы свойств (yml)

Приложение-dev.yml

1
2
3
4
5
6
7
spring:
    profiles:
        active: dev
    thymeleaf:
        cache: false        prefix: file:src/main/resources/templates/  #directly serve from src folder instead of target    resources:
        static-locations: file:src/main/resources/static/ #directly serve from src folder instead of target        cache:
            period: 0

 

application-prod.yml (ничего не отменяет)

1
2
3
spring:
    profiles:
        active: prod

Надеюсь это поможет!

Опубликовано на Java Code Geeks с разрешения Ганеша Тивари, партнера нашей программы JCG . См. Оригинальную статью здесь: Spring Boot — Как пропустить кэш шаблона thyemeleaf, js, css и т. Д., Чтобы обойти каждый раз перезапуск сервера

Мнения, высказанные участниками Java Code Geeks, являются их собственными.