Статьи

Как сделать: весенний ботинок и тимелист с Maven

Spring Boot — это отличный программный продукт, позволяющий загрузить приложение Spring за несколько секунд. И это действительно работает. Как можно меньше конфигурации, чтобы начать. И все же можно изменить настройки по умолчанию. Давайте посмотрим, как легко загрузить Spring MVC с Thymeleaf и Maven и работать с ним в IntelliJ.

Базовая настройка Spring MVC + Thymeleaf с Maven

Убедитесь, что у вас установлен Maven 3 с помощью следующей команды: mvn --version . Перейдите в каталог, в котором вы хотите создать свой проект, и выполните архетип Maven:

1
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=pl.codeleak.demos.sbt -DartifactId=spring-boot-thymeleaf -interactiveMode=false

Приведенная выше команда создаст новый каталог spring-boot-thymeleaf . Теперь вы можете импортировать его в вашу IDE. В моем случае это IntelliJ.

Следующим шагом является настройка приложения. Откройте pom.xml и добавьте родительский проект: значения из родительского проекта будут значениями по умолчанию для этого проекта, если они не указаны.

Следующим шагом является добавление веб-зависимостей. Для этого я сначала удалил все предыдущие зависимости (на самом деле junit 3.8.1) и добавил следующие зависимости: теперь, подождите секунду, пока Maven загрузит зависимости и запустите mvn dependency:tree чтобы увидеть, какие зависимости включены.

Следующая вещь — это конфигурация упаковки. Давайте добавим подключаемый модуль Spring Boot Maven: базовые настройки уже выполнены. Теперь мы можем запустить приложение. Плагин Spring Boot Maven предлагает две цели run и repackage . Итак, давайте запустим приложение, используя mvn spring-boot:run . Команда должна выдать Hello World! , Обратите внимание, что в классе App есть метод main . Фактически, вы можете запустить этот класс в IntellJ (или любой другой IDE).

1
Hello World!

Но подожди минутку. Это не веб-приложение. Итак, давайте App класс App чтобы он стал точкой входа в приложение Spring Boot:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
package pl.codeleak.demos.sbt;
  
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
  
@EnableAutoConfiguration
@Configuration
@ComponentScan
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }
}

В дополнение к вышесказанному, я бы удалил AppTest как он отстой (он был создан maven-archetype-quickstart)! Теперь мы можем запустить приложение еще раз, чтобы увидеть, что происходит:

1
java.lang.IllegalStateException: Cannot find template location: class path resource [templates/] (please add some templates or check your Thymeleaf configuration)

Ясно. Давайте тогда добавим несколько шаблонов Thymeleaf.

Где разместить шаблоны Thymeleaf?

Стандартным местом для шаблонов является… templates доступные в classpath. Поэтому нам нужно поместить хотя бы один шаблон в каталог src/main/resources/templates . Давайте создадим простую: снова запустив приложение, мы запустим встроенный Tomcat с нашим приложением на порту 8080:

1
Tomcat started on port(s): 8080/http

ОК. Но чего-то не хватает. Когда мы перейдем к localhost:8080 мы увидим страницу 404 . Конечно! Контроллеров еще нет. Итак, давайте создадим один:

01
02
03
04
05
06
07
08
09
10
11
12
13
package pl.codeleak.demos.sbt.home;
  
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
  
@Controller
class HomeController {
  
    @RequestMapping("/")
    String index() {
        return "index";
    }
}

После повторного запуска приложения вы сможете увидеть Hello Spring Boot! страница!

Добавление статических ресурсов

Как и в шаблонах Thymeleaf, статические ресурсы по умолчанию отправляются из classpath.
Мы можем поместить файлы CSS в src/main/resources/css , файлы JavaScript в src/main/resources/js и т. Д.

В шаблоне Thymeleaf мы ссылаемся на них так:

Преобразование упаковки из банки в войну

Но что, если мы хотим запустить приложение как простое веб-приложение и предоставить его как пакет war? Это довольно легко с Spring Boot. Во-первых, нам нужно преобразовать тип упаковки в pom.xml из jar в war (элемент упаковки). Во-вторых, сделайте так, чтобы Tomcat представлял собой зависимую зависимость: последний шаг заключается в загрузке конфигурации сервлета. Создайте класс Init и наследуйте от SpringBootServletInitializer :

01
02
03
04
05
06
07
08
09
10
11
package pl.codeleak.demos.sbt;
  
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
  
public class Init extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }
}

Мы можем проверить, работает ли конфигурация с mvn clean package Maven: mvn clean package . Файл войны должен быть создан:

1
Building war: C:\Projects\demos\spring-boot-thymeleaf\target\spring-boot-thymeleaf-1.0-SNAPSHOT.war

Используйте Maven для непосредственного запуска приложения из файла war:

1
java -jar target\spring-boot-thymeleaf-1.0-SNAPSHOT.war

Имея военный проект, мы можем запустить приложение в IntelliJ. После того, как мы изменили упаковку, IntellJ должен обнаружить изменения в проекте и добавить к нему веб-фасет. Следующим шагом является настройка сервера Tomcat и запуск его. Перейдите, чтобы Edit Configurations и добавить сервер Tomcat с разнесенным военным артефактом. Теперь вы можете запустить приложение как любое другое веб-приложение.

Перезагрузка шаблонов Thymeleaf

Поскольку приложение, работающее на локальном сервере Tomcat в IntelliJ, мы можем перезагрузить статические ресурсы (например, файлы CSS) без перезапуска сервера. Но по умолчанию Thymeleaf кэширует шаблоны, поэтому для обновления шаблонов Thymeleaf нам нужно изменить это поведение. Для этого добавьте application.properties в каталог src/main/resources со следующим свойством: spring.thymeleaf.cache=false . Перезапустите сервер, и теперь вы можете перезагрузить шаблоны Thymeleaf без перезапуска сервера.

Изменение других настроек по умолчанию

Конфигурация кэша — не единственная доступная конфигурация, которую мы можем настроить. Пожалуйста, посмотрите на класс ThymeleafAutoConfiguration чтобы увидеть, что еще можно изменить. Чтобы упомянуть несколько: spring.thymeleaf.mode , spring.thymeleaf.encoding .

Последние мысли

Spring Boot упрощает загрузку веб-приложения. Всего за пару шагов вы получаете полностью работающее веб-приложение, которое может быть автономным или работать в любой среде сервлета. Вместо изучения конфигурации Spring вы можете сосредоточиться на разработке. Чтобы узнать больше о Spring Boot, прочитайте руководство и ознакомьтесь с руководствами Spring, которые предоставляют множество полезных руководств по началу работы. Наслаждайтесь!

Ресурсы