1 of 39

Introdução ao Spring Boot

Neste tópico abordaremos a criação de um web service REST usando os recursos do Spring Boot

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

2 of 39

Spring Boot

https://spring.io/projects/spring-boot

Spring Boot é um projeto da Spring IO que tem como principal objetivo alavancar a produtividade

  • Servidor Tomcat embutido
  • Simplifica a configuração das dependências
  • Configura automaticamente o Spring e bibliotecas de terceiros
  • Nenhuma configuração em XML

3 of 39

Ambiente de desenvolvimento

  • JDK - https://jdk.java.net/21/
  • VSCode - Visual Studio Code - 1.92.2 (16/08/2024)
  • VSCode Plugins
    • APIs com Spring Boot - Extensões VS Code
      • Thunder Client
      • Spring Boot Extension Pack
        • Spring Initializr Java Support
        • Spring Boot Tools
        • Spring Boot Dashboard
      • Extension Pack for Java
        • Language Support for Java(TM) by Red Hat
        • Maven for Java
        • Debugger for Java
        • Project Manager for Java

4 of 39

Spring Initializr - start.spring.io

5 of 39

Spring Initializr

O Initializr oferece uma forma rápida de trazer todas as dependências que você precisa para uma aplicação e faz várias configurações para você

https://start.spring.io/

6 of 39

1

2

3

5

4

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

7 of 39

1

2

3

1 - Project

Selecione a ferramenta de build do projeto.

Utilizaremos o Maven

2 - Language

Linguagem de programação

Utilizaremos Java

3 - Spring Boot

Versão do Spring Boot

Utilizaremos sempre a última versão estável (3.3.2)

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

8 of 39

4

4 - Project Metadata

Metadados do projeto. Informados ao criar a estrutura do projeto.

Consideraremos

Packing: Jar

Java: Última versão estável (21)

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

9 of 39

5

5 - Dependencies

Dependências do projeto. Bibliotecas base e opcionais para definir as tecnologias utilizadas no projeto Spring Boot.

Clique em Add Dependencies

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

10 of 39

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

11 of 39

5

5 - Dependencies

Spring Web é a dependência básica para uma aplicação Web para a construção de uma API RESTFul.

Clique em GENERATE.

IDS-002

Desenvolvimento para Servidores II

Sistemas para Internet

12 of 39

Build e Gerenciamento de dependências

A automação do build é o processo de automatizar as tarefas necessárias para criar, executar e testar programas. Depois de criar o código-fonte de um programa, deve-se processar e preparar o código-fonte para implantação em ambientes de execução.

Algumas tarefas de automação que são realizadas:

  • Compilação;
  • Gerenciamento de dependências;
  • Testes automatizados;
  • Criação dos pacotes para implantação
    • Prepara o código-fonte para implantação em servidores.

13 of 39

Build e Gerenciamento de dependências

Clicando em explore, veremos o pom.xml, arquivo de build do Maven

Principais elementos do pom.xml

  • project
    • metadados → version, groupId, artifactId, version, name, description
    • parent
    • dependencies
      • dependency
    • build
      • plugins
        • plugin

14 of 39

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>3.2.3</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.fatecbs</groupId>

<artifactId>helloWorld</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>helloWorld</name>

<description>API REST com Spring Boot</description>

<properties>

<java.version>21</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

15 of 39

Executando a aplicação no VSCode (1/6)

  • Baixe e descompacte o arquivo (HelloWorld.zip)
  • Abra a pasta no VSCode

PS C:\git\fatec> Expand-Archive .\HelloWorld.zip -DestinationPath ./temp

PS C:\git\fatec> Move-Item .\temp\HelloWorld\ -Destination . -Force

PS C:\git\fatec> code .\HelloWorld\ -r

16 of 39

Executando a aplicação no VSCode (1/6)

  • Ao abrir, o VSCode é configurado de acordo com o �conteúdo do pom.xml e as extensões instaladas

17 of 39

Executando a aplicação no VSCode (2/6)

  • Dependências

18 of 39

Executando a aplicação no VSCode (3/6)

  • Para executar a aplicação, expanda a aba MAVEN
  • Clique em plugins → spring-boot
  • Clique no play no item run
  • É equivalente ao comando abaixo

PS C:\git\fatec\HelloWorld> & "c:\git\fatec\HelloWorld\mvnw.cmd" | � spring-boot:run -f "c:\git\fatec\HelloWorld\pom.xml"

PS C:\git\fatec\HelloWorld> ./mvnw spring-boot:run

19 of 39

Executando a aplicação no VSCode (4/6)

A primeira execução fará com que todas as dependências sejam carregadas do repositório Maven remoto para o seu local (Downloading from Central):

20 of 39

Executando a aplicação no VSCode (5/6)

A aplicação será implantada em um servidor Tomcat embutido

Servidor Tomcat embedded (embutido) no Spring, via Spring Boot

21 of 39

Executando a aplicação no VSCode (6/6)

Se você digitar localhost:8080 em um browser, vai obter a página padrão de erro do Spring

22 of 39

Spring Initializr - VSCode

23 of 39

Spring Initializr (1/4)

  • Uso do Spring Initializr no VSCode através da extensão “Spring Initializr Java Support”

24 of 39

Spring Initializr (2/4)

  • Add Starters
    • Permite alterar o pom.xml, adicionando novas dependências
  • Create a Gradle / Maven Project
    • Cria um novo projeto spring-boot com o gerenciador selecionado
    • Os itens configurados aqui são realizados através de prompts feitos pela IDE

25 of 39

Spring Initializr (3/4)

  • Prompts

1

2

3

4

5

6

7

8

9

10

26 of 39

Spring Initializr (4/4)

  • Prompts

1

2

3

4

5

6

7

8

9

10

27 of 39

Implementação básica (1/4)

  • O Initializr cria uma classe simples (HelloworldApplication), anotada* com @SpringBootApplication
    • Com isso, o Spring sabe que esta é a classe principal da aplicação
  • Não há configuração de XML para definir quaisquer estruturas da sua aplicação web (HTTPServlet, por exemplo)

*Anotações são metadados (ou DecorativeData, como alguns podem preferir); informações extras sobre o código que está escrito.

28 of 39

HelloworldApplication.java

package com.fatecrl.helloworld;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class HelloworldApplication {

public static void main(String[] args) {

SpringApplication.run(HelloworldApplication.class, args);

}

}

29 of 39

Implementação básica (2/4)

  • Cada recurso REST deverá ter uma implementação de uma classe com uma anotação @RestController
    • Assim, Spring sabe que esta classe contém uma ou mais definições de uma API.

Podemos fazer isto em qualquer classe, inclusive na própria classe principal, mas não é uma boa prática.

30 of 39

Implementação básica (3/4)

Crie um pacote �- com.fatecrl.helloworld.controller

Crie uma classe �- HelloWorldController

31 of 39

HelloWorldController.java

package com.fatecrl.helloworld.controller;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

@RestController

@RequestMapping("/helloworld")

public class HelloWorldController {

@GetMapping()

public String sayHello(){

return "Hello World!";

}

}

32 of 39

Implementação básica (4/4)

  • com.fatecrl.helloworld.controller.HelloWorldController
    • @RestController
      • Contém uma ou mais definições de uma API.
    • @RequestMapping
      • Define o contexto padrão para todas as APIs de um controller, a partir do contexto da aplicação
    • @GetMapping
      • Define o contexto para uma API, a partir do contexto da �controller

33 of 39

resources/application.properties

spring.application.name=helloworld

server.servlet.contextPath=/api

34 of 39

Versionamento, Git, Github

35 of 39

Versionando a aplicação no Git (1/4)

  • Para entregas de projetos práticos, projetos deverão ser versionados no Git
    • Hospedar em plataforma (GitHub / GitLab / BitBucket, etc) e enviar o endereço
  • Para envio de exemplos de código demonstrados em aula

36 of 39

Versionando a aplicação no Git (2/4)

  • Crie um repositório remoto em branco (ex: GitHub)

37 of 39

Versionando a aplicação no Git (3/4)

  • Comandos

git init

Initialized empty Git repository in C:/git/fatec/HelloWorld/.git/

git add .

git commit -m "Versão inicial - HelloWorldSB"

git branch -M main

git remote add origin https://github.com/diegoneri/hello-world-sb.git

git push -u origin main

38 of 39

Versionando a aplicação no Git (4/4)

39 of 39

Obrigado!