SpringBoot em 5 minutos – parte I

SpringBoot em 5 minutos – parte I

O Spring é o framework  mais utilizado no universo Java no momento. E sem dúvida o que mais me fascina nesse framework é a transparência que ele entrega ao desenvolvedor para tarefas não tão triviais.

Anti-Java você já deve ter encontrado esse tipo em algum lugar, anti-java (pessoas que não estudaram Java e clamam que ela é uma tecnologia difícil) . Esses sempre usaram a desculpa de que Java é uma tecnologia complicada que se leva muito menos tempo pra se fazer “não sei o que” com outra linguagem e de que essa é muito mais rápido e fácil e bla, bla, bla. Agora quando alguém vier com essa retórica para cima de você responda simplesmente (com um pequeno sorriso): “Você conhece o SpringBoot?”.

SpringBoot é um conjunto de tecnologias que trazem uma nova abordagem para o desenvolvimento de aplicações que fazem uso do framework Spring.

Com os starters do SpringBoot conseguimos simplificar muitas etapas de configurações e declarações de diversas bibliotecas e tecnologias como o RabbitMQ, Redis, etc.

Ou seja se a nossa aplicação vai fazer uso do Redis por exemplo, não precisamos nos preocupar com todas as dependências de bibliotecas e suas versões e também com parte das configurações. Isso graças aos starters que já trazem para a aplicação a dependência de todos os jars, e suas versões, de que precisamos para acionar o Redis via Spring. O SpringBoot também facilita e deixa transparente para o desenvolvedor muitas configurações necessárias para que o Redis esteja pronto para uso.

Tudo isso sem citar o fato de que o SpringBoot trás um Container Java (ex. TomCat) embutido na sua aplicação. O que isso significa? Significa de que você não vai mais precisar de um container externo, com todas as suas configurações e dificuldades de deploy, e vai simplesmente rodar sua aplicação como se ela fosse uma simples aplicação Java Standalone, ou seja, inicializando uma chamada para uma classe com um método main, porém no final você terá uma aplicação WEB com um container escutando em uma porta http. Novamente friso: tudo isso de maneira simples e transparente. Mas nada como a prática, como dizia o projeta: “Uma prática vale mais do que mil imagens”.

5 minutos de prática

Sim, cinco minutos para você construir uma aplicação Java-WEB com REST’s endpoints. E com mais 15 minutos, que são os próximos post’s, cada um de 5 minutos, você terá construído uma robusta aplicação Java-WEB com acesso a databases, REST endpoint’s, pacote de testes end-to-end e mais.

Vamos começar!!!

Acesse o site: https://start.spring.io/.

springinit

Este site nos possibilita criarmos de maneira muito simples e rápida toda a estrutura de um projeto SpringBoot com todas as dependências necessárias. Veja que a interface do site é muito intuitiva e acredito que não merece muitas explicações adicionais.

Quando você tiver preenchido os campos: group (com.alissonpedrina), artifact (spring-app) e adicionado a dependência Web (search for dependencies) clique no botão Generate Project  para realizar o download de nosso projeto (arquivo: spring-app.zip).

Vamos descompactar o projeto em algum diretório:

unzip spring-app.zip -d .

O conteúdo do arquivo zip:


//tree

├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│   ├── java
│   │   └── com
│   │   └── alissonpedrina
│   │   └── springapp
│   │   └── SpringAppApplication.java
│   └── resources
│   ├── application.properties
│   ├── static
│   └── templates
└── test
└── java
└── com
└── alissonpedrina
└── springapp
└── SpringAppApplicationTests.java

Inspecionando o pom.xml vemos que o nosso projeto tem um pom pai.

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.5.RELEASE</version>
   <relativePath/> <!– lookup parent from repository –>
</parent>

Pom pai é o pai do nosso pom e sendo assim o nosso pom herda todas as características do seu pai. Se buscarmos no github podemos ver esse pom pai, segue url: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters/spring-boot-starter-parent. Esse pom pai define e configura alguns plugins que toda aplicação SpringBoot deve ter. Vemos também que ele mesmo também tem um pom pai (como mostrado abaixo):


<artifactId>spring-boot-dependencies</artifactId>

Este pom pai do nosso pom pai (spring-boot-dependencies) define todas as dependências básicas que podem ou não ser utilizados pelos seus filhos e o nosso pom é seu filho, isto porque elas são declaradas na seção: dependency management. Acesse esse pom nesta url: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-dependencies/pom.xml.

Voltando ao nosso pom.xml notamos que temos duas dependências:

<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>

A dependência spring-boot-starter-web foi adicionada porque escolhemos no site start.spring.io a dependencia Web. Repare que a tag <version> foi omitida no nosso pom, isso porque a versão desta dependência já está declarada, seguindo a hierarquia de pom’s, no pom do artefato: spring-boot-dependencies, como visto acima.

Após essa breve explicação sobre o nosso pom podemos ver que a classe SpringAppAplication temos a anotação: @SpringBootApplication. Está anotação em si representa e agrupa três outras anotações que são:

@Configuration: define classes aonde existem definições dos Beans para o contexto da aplicação.

@EnabledAutoConfiguration: possibilita que declarações de Beans e de configurações que estejam no classpath sejam habilitados.

@ComponentScan: diz para o Spring buscar outras classes de configurações e seus Beans no package e sub-packages no qual a classe anotada está localizada.

Temos também um arquivo application.properties e uma classe de teste no pacote src/test.

Execução

Graças a dependência spring-boot-starter-web já temos um container Java embutido em nossa aplicação, default é o TomCat mas pode ser o Jetty ou o Undertow. Para executar a aplicação precisamos apenas iniciar a classe com o método main anotada com @SpringBootApplication ou podemos executar utilizando o maven através do comando abaixo:


mvn spring-boot:run

Agora acesse a url http://localhost:8080.

Percebam que quando acessamos está url acima, seremos redirecionados para uma mensagem de erro padrão da aplicação, porque ainda não temos mapeados url’s válidas. Mas o fato aqui é que podemos ver que com alguns simples passos já temos uma aplicação Java WEB rodando.

REST

Agora vamos criar um simples endpoint REST. Para isto primeiramente iremos criar uma classe, HelloRestController, em um novo pacote da nossa app, src/main/java/com/alissonpedrina/resources/:


package com.alissonpedrina.springapp.resources;

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

@RestController
public class HelloRestController {

@RequestMapping(value = "/")
public String sayHello(){
return "Hello SpringBoot!!!";
}

}

Para testar nosso endpoint REST acesse: http://localhost:8080/

A saída será:

Hello SpringBoot!!!

Conclusão

Assim terminamos nosso primeiro post da série SpringBoot em cinco minutos, série que visa apresentar, de maneira simples e focado na prática, algumas características do framework Java mais popular do momento. Nos próximos post iremos continuar a trabalhar em nossa aplicação introduzindo outras interessantes e úteis possibilidades que o SpringBoot nos oferece, como acesso a dados, cache, monitoração e outros. Abaixo alguns posts que já publicamos que estão relacionados com o SpringBoot:

SpringBoot e Redis

SpringBoot Admin

 

 

 

 

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s