O Spring Boot surgiu com o propósito de simplificar a vida da pessoa DEV.

O mundo está cada vez mais ágil e, para desenvolvedores, é crucial ter meios que possam simplificar as configurações que são necessárias para iniciar o desenvolvimento de uma aplicação.

Afinal, ninguém quer perder horas, ou até dias configurando um projeto para enfim poder codar. Isso impacta negativamente a produtividade da pessoa desenvolvedora, que poderia investir todo esse tempo com novas soluções para a aplicação e não em configurações.

Quer entender melhor sobre Spring Boot? Então vem com a gente!

O que veremos:

O que é Spring Boot?

O Spring Boot é um framework Open Source que nasceu a partir do Spring framework e veio para facilitar as configurações iniciais de um projeto. Mas, vamos voltar um pouco mais na história…

Antes de ambos os frameworks nascerem, as pessoas desenvolvedoras enfrentavam uma grande dor: a perda de tempo configurando projeto ao invés de desenvolver. Tendo isso em vista, em 2003, Rod Johnson criou o Spring framework, que veio com o intuito de simplificar essas configurações para aplicações web.

Isso foi muito benéfico na época, mas logo notaram que, se a aplicação fosse muito grande, as configurações ficavam grandes e complexas também, pois o Spring Framework não isenta configurações, ele apenas simplifica.

Foi então que surgiu o Spring Boot, que fez decolar a plataforma Spring, pois ele nada mais é que uma extensão do Spring Framework, ou seja, ele tem tudo o que existe no outro, de forma embutida. Ele já traz um servidor embarcado e todas as configurações iniciais prontas.

Esquema de composição do Spring Boot

O que são microsserviços e a relação com o Spring Boot?

Quando falamos de Microsserviços, estamos falando de um sistema que tem apenas uma responsabilidade e a exerce muito bem.

Portanto, os microsserviços têm como objetivo isolar serviços, ou seja, se há um sistema com muitas funcionalidades que estão acopladas, você pode desacoplá-las e assim não correr o risco de ter todo o sistema comprometido caso algum serviço apresente erro.

Atualmente, o Spring Boot é muito utilizado para a criação de microsserviços, já que o Spring Boot é Stand Alone, ou seja, são aplicações que funcionam por si só, dependendo somente de uma das linguagens de programação suportadas pelo Spring boot.

Como funciona o Spring Boot?

O Spring Boot traz a ideia de convenção em vez de configuração, e, para fazer jus a essa frase, a própria plataforma Spring disponibilizou a ferramenta Spring Initializr, que possibilita à pessoa desenvolvedora ter toda a configuração inicial de um projeto Spring com alguns cliques.

Ao criar um projeto utilizando a linguagem de programação Java, adicionando apenas uma dependência —a Spring Web — e abrindo na sua IDE de preferência, você verá a seguinte hierarquia de pastas:

Imagem do Spring Web na sua IDE de preferência

Sem precisar escrever uma linha de código ou realizar qualquer configuração manual, é possível subir essa aplicação sem apresentar nenhum erro no log. Não acredita? Então vamos mostrar a você:

Para executar a aplicação, é necessário abrir a classe principal ProjetotrybeApplication e executar a aplicação na opção run. Após fazer isso, você já verá o log da aplicação.

log Spring Boot

Note que no log aparece qual a versão do Java estamos utilizando, qual o servidor que está configurado em nossa aplicação — nesse caso é o Tomcat — e ele está subindo a aplicação na porta 8080… Mas pera aí, não foi configurado nenhum servidor, como ele apareceu ai?

Olhando assim temos a impressão que os criadores do Spring Boot estudaram em Hogwarts e que estão fazendo mágica, não é mesmo? Mas, vamos entender o que está acontecendo nos bastidores:

Primeiro, vamos falar sobre a pom.xml, pois é nela que teremos todas as dependências do nosso projeto e, para quem utiliza o Maven como gerenciador de dependências, sabe o quanto ele facilita na organização da nossa pom.

Você precisa do JPA? Lombook? Spring Web? É na pom.xml que essas dependências irão ficar.

E o Tomcat que apareceu no log sem ter sido configurado? Bom, essa é simples: o Spring Boot traz uma instância do Tomcat embarcada na aplicação. Ele já vem configurado, logo, assim que você cria um projeto, já é possível testar se o servidor está funcionando, como vimos acima.

O Spring Boot também trabalha com as famosas annotations. Com elas, é possível otimizar o código, deixando as nossas classes mais enxutas e limpas. Vamos ver um exemplo:

Quando você inicia um projeto com Spring Boot e a linguagem de programação Java, você terá uma classe principal. Para o Java, a classe principal é a classe que possui o método main e é nessa classe que temos aannotation SpringBootApplication.

exeplificação de classe Spring Boot

Pressionando o CTRL e clicando em cima dá notação, você verá que ela é uma interface e que possui outras annotations, como:

  • @SpringBootConfiguration;
  • @EnableAutoConfiguration;
  • @ComponentScan.

E se você entrar em cada uma dessas notações, verá que elas também são interfaces e que possuem outras annotations. É muita configuração!!

Então, a annotations @SpringBootApplication está trazendo uma série de configurações por baixo dos panose o Spring Boot funciona assim, em vez de termos que criar diversas classes de configuração e várias linhas de código, é possível colocar as notações certas em cada classe e método que a aplicação já funciona. Essa é a mágica!

Para que serve o Spring Boot? Principais aplicações!

O Spring Boot serve para gerenciar dependências de forma opinativa e automática, portanto, ele nos diz: “Olha, comece com isso e se você precisar, adicione isso”.

Colocando algumas dependências, fica mais simples realizar a execução do projeto em tempo de desenvolvimento. É possível buildar o projeto quantas vezes precisar, sem ter que dar a volta ao mundo para isso.

Portanto, o Spring Boot serve para facilitar o desenvolvimento de aplicações de grande e pequeno porte de forma independente.

O que é o Spring Boot initializr?

Como mencionado anteriormente, iniciar uma aplicação web ficou muito mais fácil depois do surgimento do Spring Boot. Em minutos conseguimos adicionar todas as dependências iniciais do nosso projeto e subir ele com o servidor que já vem embutido nessas configurações.

Para facilitar todo esse processo, a plataforma Spring criou o Spring Initializr, que nada mais é que uma ferramenta que facilita a criação dos nossos projetos com esse maravilhoso framework.

Para ter acesso ao Spring Initializr, basta acessar o link oficial. Ao entrar na página, você verá que ele pede algumas informações sobre o seu projeto.

Tela do Spring Initializr

Por padrão, ele diz que o gerenciador de dependência do seu projeto será o Maven, mas você pode trocar para o Gradle. Ele pede para você informar qual a linguagem de programação que será utilizada. Note que só contém 3 opções disponíveis:

  • Java;
  • Kotlin;
  • Groovy.

Além disso, ele mostra todas as versões do Spring Boot e deixa por padrão a mais recente.

Na área de Project Metadata, você deve colocar os dados do seu projeto, como:

  • grupo (geralmente utilizado com br.com.nome);
  • artefato (é a chave do seu projeto);
  • nome, descrição e o nome do pacote principal.

Por fim, ele pergunta qual será a extensão do projeto, se é Jar ou War, e a versão da linguagem que você escolheu. Aqui no nosso caso é o Java, portanto, ele traz as versões mais recentes e marca por configuração padrão a versão LTS do Java.

Ao lado, existe uma área de Dependências e é aí que a mágica acontece. É aqui que você escolherá quais as dependências que terão no seu projeto. Vai usar JPA? H2? É só escolher a dependência e adicionar!

Feito isso, basta clicar em Generate que o projeto será baixado na sua máquina compactado. Descompacte e abra-o na sua IDE de preferência. 

Quais os 3 principais componentes do Spring Boot?

Para que tudo aconteça, o Spring Boot tem três componentes principais que estão trabalhando na aplicação por trás das cortinas. Apresentamos a vocês o Spring Boot Starter, Spring Boot AutoConfigurator e o Spring Boot Actuator. Vamos entender melhor como cada uma funciona.

1. Spring Boot Starter

Lembra que falamos que na pom.xml adicionamos as dependências que a nossa aplicação terá? Essas dependências são “otimizações” de várias outras dependências que em uma aplicação convencional, teríamos que configurar uma por uma.

O Spring Boot Starter possui inicializadores que unificam diversas dependências e configurações dentro de uma única dependência.

2. Spring Boot AutoConfigurator

Mencionamos a annotation @SpringBootApplication e vimos que entrando nela temos outras notações, e é assim que conseguimos ver o funcionamento do Spring Boot AutoConfigurator.

Ele é responsável por dar as coordenadas de configuração para a aplicação. Além disso, ele une as configurações padrão e as configurações que a pessoa desenvolvedora implementou no projeto.

3. Spring Boot Actuator

Por fim, o Spring Boot Actuator nos ajuda a monitorar a saúde da nossa aplicação nos fornecendo métricas. Com ele, é possível verificar se está tudo funcionando da forma que deveria funcionar dentro do nosso projeto.

Ele é muito importante principalmente para projetos grandes, pois é muito difícil acompanhar a saúde de todas as nossas aplicações.

Como Instalar o Spring Tool Suite(STS)?

Além do Spring Initializr, que é uma plataforma que permite que façamos a configuração inicial do projeto, temos uma IDE que facilita muito o desenvolvimento de aplicações utilizando o Spring Boot, como é o caso do Spring Tool Suite. Vamos ensinar a você como instalar. É bem fácil!

1 – Acesse o Link oficial.

2 – Já no site, você deve selecionar qual o Sistema Operacional do seu computador. 

Tela do Spring Tools

3 – Ao selecionar o seu SO, iniciará o download de um jar. Ao finalizar o processamento, clique duas vezes em cima do arquivo jar.

Arquivo executável .jar para iniciar o Spring Tool

4 – Finalizado a execução do arquivo jar, aparecerá uma pasta chamada sts-4.11.0.RELEASE. Abra a pasta.

5 – Ao Abrir a pasta, procure SpringToolSuite4.exe, clique duas vezes em cima para abrir a IDE. 

Onde encontrar na pasra o executável do Spring Tool (Spring Boot)

E é só isso, você já instalou o STS. Nós dissemos que era fácil! Agora vamos codar!

Como criar um projeto Spring Boot no STS? O passo a passo com exemplos!

Agora que você instalou o STS, vamos fazer o famoso “Olá Mundo” para nos dar sorte nesse início de jornada com o Spring Boot? Afinal, reza a lenda que quando você está aprendendo uma tecnologia nova e não faz um “Olá Mundo”, você não terá sorte com ela!

Preparando o ambiente…

Abrindo o STS, ele pedirá para você adicionar uma workspace. Você pode criar uma pasta e abri-la. Feito isso, clique em Launch.

Configurando diretório

Ao abrir, você verá a interface do STS. Olhando na parte superior você verá um menu, selecione:

File > New > Spring Starter Project

Ao seguir esse passo a passo, você verá uma tela bem parecida com a tela que vimos no Spring Initializr para preencher as informações do projeto, então basta preencher essas informações como vimos lá e next.

Configurações de um projeto Spring Boot

Feito isso, você verá a tela para adicionar dependências. No nosso caso, como será apenas um Olá Mundo, adiconaremos apenas o Spring Web e clicaremos em finish.

Configurações de um projeto web para um "Olá Mundo" utilizando Spring Boot

Ao finalizar, assim como foi mostrado no exemplo acima, você verá a classe principal do Java e toda a hierarquia de pastas que o Spring Boot organiza para nós.

Agora vamos colocar a mão na massa? 

Criando a nossa Classe

Crie uma nova package e depois clique em cima dela com o botão direito. Selecione:

  • New > Class
  • Dê um nome para a sua classe.
Nova classe de Java

E pronto, você criou a sua classe Controller. Agora vamos ver como ficará o código:

O código para Olá, Mundo

Para executar a sua aplicação, observe que no STS tem um campo escrito Boot Dashboard e, logo abaixo, o símbolo do Spring Boot. Ao lado está escrito local, basta expandir e você verá o nome da sua classe principal. Clique em cima dela e execute a aplicação.

Onde executar a aplicação em Spring Boot

Agora, vá até o navegador e digite: localhost:8080

Olá Mundo

E olha a sua mensagem aí! Agora você terá muita sorte na sua jornada com o Spring Boot.

Executando e entendendo a sua aplicação Spring Boot

Quando criarmos classes controllers, seja em uma aplicação de pequeno ou grande porte, criamos classes controller para colocar todos os nossos métodos manipuladores de requisições e o Spring Boot identifica esses métodos por meio das annotations que colocamos tanto em cima do nome da nossa classe quanto em cima do nosso método.

A annotation @RestController faz com que o Spring Boot consiga entender que essa classe é um controlador. Já a annotation @RequestMapping é utilizada para implementar URL. Essa notação suporta os métodos GET, POST, PUT, DELETE e Patch.

A notação @GetMapping é composta da @RequestMapping. Ela é utilizada para mapear requisições HTTP GET. Essa notação é muito importante quando a pessoa desenvolvedora precisa fazer requisições via postman, pois nessa plataforma é necessário informar qual o tipo do método está sendo esperado.

E, por fim, temos o ResponseEntity que colocamos tanto no inicio do nosso método quanto no retorno dele. No inicio do método, quando colocamos ResponseEntity<?> estamos configurando a resposta HTTP como seu corpo e status. No corpo da resposta HTTP podemos passar um objeto que pode ser uma String ou um objeto composto por diversos atributos.

No return utilizamos ResponseEntity.ok().body. Fazendo isso, estamos acessando os métodos que o ResponseEntity nos fornece. Como queríamos o corpo da nossa requisição, buscamos o método body.

Quais as vantagens de usar Spring Boot?

Como podemos ver até aqui, utilizar o Spring Boot tem uma série de vantagens, mas separamos 3 para você!

Redução drástica no tempo de desenvolvimento

O Spring Framework trouxe essa ideia inicialmente, mas o framework que realmente colocou isso em prática foi o Spring Boot. Como vimos, com alguns cliques você já tem a configuração inicial necessária do seu projeto. Agora imagine o tempo que seria gasto para fazer essas configurações manualmente, seria um grande desperdício de tempo!

Servidor embutido

Como vimos, o Spring Boot já nos fornece um servidor embarcado para subir a nossa aplicação, esse servidor geralmente é o Tomcat. Ele fica responsável por definir como as solicitações de servidor vão ser tratadas, além de servir como um ambiente de servidor HTTP.

Além disso, o Spring Boot também permite que seja feito a troca de servidor. Se você quiser usar o Jetty, por exemplo, basta trocar as dependências.

Pom.xml organizado

O Spring Boot permite que a nossa pom.xml fique bem organizada, pois colocando uma dependência, temos acesso às subdependências. Então, adicionando apenas uma dependência, você tem acesso a várias outras sem ter que colocá-las de fato na sua aplicação.

Quais as desvantagens de usar Spring Boot?

É, nem tudo são flores e temos algumas desvantagens com o Spring Boot. Como vimos até aqui, ele é extremamente opinativo e nos fornece uma configuração padrão inicial e não conseguimos mexer nessas configurações padrões.

O problema disso é que pode ter muitas configurações desnecessárias para o projeto, configurações que a aplicação não precisaria para funcionar e isso pode fazer com que ela se torne mais pesada e consequentemente mais lenta.

Por isso, é muito importante que, ao iniciar um projeto Spring Boot, seja feito um entendimento de escopo do projeto e uma definição de funcionalidades, para que não tenha dependências desnecessárias na aplicação.

Spring Boot vs Spring MVC, quais as diferenças?

O Spring MVC (Model, View, Controller) é uma estrutura orientada a HTTP, ou seja, ele “escuta” as requisições feitas na aplicação web, depois ele envia essas requisições para os destinos corretos e só então ele retorna uma resposta.

Já o Spring Boot, como vimos até aqui, é um framework que facilita as configurações iniciais de um projeto, mas por si só, o Spring Boot não faz com que o nosso projeto seja web.

Portanto, o Spring Boot e o Spring MVC são frameworks diferentes. Se você tivesse que criar um projeto web utilizando o Spring Framework, você precisaria configurar o Spring MVC para que o seu projeto se tornasse web. Já com o Spring Boot, você não precisa realizar a configuração do Spring MVC, basta adicionar o módulo Web que você teria as configurações iniciais do Spring MVC.

Devtools Spring Boot: entenda esse módulo e para que serve?

O DevTools é uma dependência que permite algumas façanhas muito úteis na hora de desenvolver.

Essa dependência permite que:

  • reiniciemos o projeto automaticamente sempre que realizarmos alguma alteração.
  • sejam habilitadas algumas configurações por padrão que são necessárias para o desenvolvimento, impedindo que tenhamos que realizar essas configurações na application.properties.
  • seja desabilitado o cache das páginas em HTML quando estamos no ambiente de desenvolvimento.
Devtools Spring Boot

6 Boas práticas para aplicações Spring Boot

1. Use o Spring Initializr

Como o intuito base do Spring Boot é facilitar a vida da pessoa desenvolvedora simplificando ao máximo configurações, é bem interessante utilizar a interface Spring Initializr para agilizar mais ainda o processo de criação do seu projeto.

Como vimos, com alguns cliques e algumas informações você já consegue ter toda a configuração inicial e investir todo o seu tempo em desenvolvimento.

2. Arquitetura das aplicações e arquitetura limpa!

A arquitetura de um projeto é um tema muito discutido e para os amantes de leitura, existe um livro chamado Arquitetura Limpa que trata sobre esse assunto. Separamos 4 tópicos comumente utilizados para entendermos um pouco mais.

Package by Layer

Antes de começar um desenvolvimento, é necessário parar e entender quais são as responsabilidades e os papéis de cada parte da nossa aplicação para que assim possamos colocar cada trecho de código no seu devido lugar.

Falamos sobre o Spring MVC, que possui as camadas Model, View e Controller. Cada camada precisa ser entendida e cada linha de código precisa estar no lugar certo.

Package by Feature

No nosso exemplo de Olá Mundo, criamos um pacote com o nome controller. Nesse exemplo, não havia necessidade de separar a classe por pacote, porém, é uma boa prática fazer isso em grandes aplicações.

Geralmente, as aplicações possuem classes de DTO’s, Repository, Controllers e Services, cada domínio possui códigos com uma responsabilidade. As classes controllers, por exemplo, possuirão métodos que manipulam requisições. Já as Repository’s, se comunicarão com o banco de dados. Então, não faria sentido ter um método manipulador de requisição junto com um trecho de código que está se comunicando com o banco de dados.

Ports and adapters

Em uma aplicação precisamos entender muito bem as regras de negócio que o projeto atenderá para depois desenvolvermos o código que suprirá determinadas necessidades.

Mas também teremos partes da aplicação que são exclusivamente técnicas, como a comunicação com o banco de dados e é importante que as regras de negócios estejam separadas de partes totalmente técnicas. 

Package by Component

O Package By Component tem como função “juntar” responsabilidades relacionadas, ou seja, um componente junta lógica de negócios e acesso a banco de dados, por exemplo.

3. Saiba quando usar cada Injeção de dependência Spring

Muitas vezes precisamos criar classes que vão “compor” a funcionalidade de outra classe. Isso faz com que a classe X precise saber como instanciar e como utilizar a classe Y, o que faz com que elas se tornem dependentes.

Com isso, o Spring “herdou” os conceitos de Inversão de Controle e Injeção de Dependências que vieram do SOLID. A Inversão de Controle possibilita que outra classe saiba quando é necessário criar e executar alguma função.

Já a Injeção de Dependência se preocupa em manter o fraco acoplamento entre as classes e tira a responsabilidade de uma classe saber como instanciar a outra.

Portanto, avalie bem o seu projeto, leia a documentação do Spring e entenda qual a melhor maneira de utilizar cada injeção de dependência.

4. Configure sua aplicação corretamente

É importante saber exatamente qual a função do seu projeto, o que ele de fato precisa fazer para que ele não tenha diversas dependências que não precisa.

Se você não tiver noção exata dos objetivos da sua aplicação, é importante voltar para a parte de planejamento e entender exatamente o que o seu projeto precisa fazer e ter para não colocar muitas configurações desnecessárias. Isso pode deixar a sua aplicação mais pesada e consequentemente mais lenta.

Não se preocupe em colocar menos dependências no momento da criação do seu projeto. É possível adicionar dependências conforme for surgindo a necessidade. Você pode encontrar diversas dependências no site e adicionar na sua pom.xml.

5. Monitore suas aplicações Spring Boot

Trabalhar com desenvolvimento de sistemas é saber que em algum momento um bug pode surgir do nada. Geralmente, esses problemas surgem quando se precisa muito do sistema, e aí é uma correria só para solucionar o problema e estabilizar o sistema.

Evitar que bugs surjam é uma tarefa extremamente difícil, mas podemos remediar esses problemas antes que eles sejam descobertos por clientes, monitorando a aplicação.

Existem diversas ferramentas no mercado que facilitam muito a monitoração dos sistemas, como o Graffana Loki e muitos outros. E há também as ferramentas que o próprio Spring oferece, como o Actuator.

Analise quais ferramentas estão disponíveis no mercado e qual se encaixa melhor na sua aplicação e não deixe de monitorá-la.

6. Poupe e otimize recursos

É importante pensarmos que outras pessoas lerão os nossos códigos e que muitas vezes será necessário realizar a manutenção dele. Para facilitar isso, é importante que eles sejam o mais limpos e assertivos possível e o Spring Boot nos ajuda muito com as annotations.

Poupamos muitas linhas de código com apenas uma annotation. Essa otimização é crucial, pois fica mais fácil dar manutenção no código, entendê-lo, além de evitar o susto inicial de abrir uma classe e ter muitas linhas de código nela.

Também devemos pensar bem nas responsabilidades das nossas classes. Criar classes com muitos métodos distintos torna a compreensão mais difícil. Portanto, analise bem a sua aplicação antes de começar a desenvolver.

O Spring Boot é um framework que cresceu e ainda vem crescendo muito no mercado, principalmente para desenvolvedores Java que precisam criar aplicações web. Portanto, se você quer embarcar nesse mundo incrível de tecnologia, não deixe de aprender Spring Boot.

E se você curtiu esse conteúdo, não deixe de ler sobre microsserviços, o que são e sua função!

0 Shares:
Deixe um comentário
Você também pode gostar