O que é Spring Boot?

Postado por em   ●   16 comentários

Muitas pessoas morrem de medo de terem que configurar uma aplicação do zero. Geralmente, são necessárias várias configurações para só então começar a codificar.

Agora, imagine pular toda essa parte chata de configurações e criar um projeto onde você já tenha tudo o que precisa para começar uma aplicação. Muito bom, não é mesmo?

Se você gostou dessa ideia, continue comigo que eu vou te mostrar como criar esse tipo de aplicação utilizando o Spring Boot.

Olha só o que você irá aprender nesse artigo:

  • O que é Spring Boot
  • Instalando o STS (Spring Tool Suite)
  • Desenvolver uma pequena aplicação web para listagem de contatos
  • Que benefícios tem o DevTools
  • Como publicar sua aplicação no Heroku

“Vambora”!?

O que é Spring Boot?

O Spring Boot é um projeto da Spring que veio para facilitar o processo de configuração e publicação de nossas aplicações. A intenção é ter o seu projeto rodando o mais rápido possível e sem complicação.

Ele consegue isso favorecendo a convenção sobre a configuração. Basta que você diga pra ele quais módulos deseja utilizar (WEB, Template, Persistência, Segurança, etc.) que ele vai reconhecer e configurar.

Você escolhe os módulos que deseja através dos starters que inclui no pom.xml do seu projeto. Eles, basicamente, são dependências que agrupam outras dependências. Inclusive, como temos esse grupo de dependências representadas pelo starter, nosso pom.xml acaba por ficar mais organizado.

Apesar do Spring Boot, através da convenção, já deixar tudo configurado, nada impede que você crie as suas customizações caso sejam necessárias.

O maior benefício do Spring Boot é que ele nos deixa mais livres para pensarmos nas regras de negócio da nossa aplicação.

Instalando o Spring Tool Suite

O Spring Tool Suite é uma IDE baseada em Eclipse que dá algumas facilidades para trabalhos com o Spring no geral. Uma das coisas legais é que ele nos ajuda a criar projetos com Spring Boot.

Mas, o STS não é pré-requisito para criação de projetos com Spring Boot. Você vai poder trabalhar com Spring Boot em qualquer IDE que dê suporte ao Maven. Inclusive um site interessante para aqueles que forem utilizar outras IDEs é o http://start.spring.io. Ele ajuda na criação de um novo projeto Spring Boot quase que da mesma forma que o STS.

Existem versões do STS para Linux, Mac e Windows. Você pode baixar em: http://spring.io/tools/sts/all.

Começar um projeto com Spring Boot no STS é bem simples. No menu File, selecione New e depois Spring Starter Project.

A primeira tela que você verá será essa daqui:

New Spring Starter Project

Caso você já tenha criado algum projeto Maven no Eclipse, então você deve conhecê-la bem.

O segundo passo que é algo mais específico do Spring Boot. Veja:

New Spring Starter Project - Dependencies

A tela acima é onde você escolhe as dependências do seu projeto, ou seja, os módulos que você vai querer utilizar. Para o projeto aqui do artigo, eu selecionei:

  • DevTools (veremos mais a frente)
  • JPA
  • H2 (nosso banco de dados em memória – não precisamos instalar)
  • Web (Spring MVC)
  • Thymeleaf (Motor para templates HTML)

Existem vários outros além desses aí. Você pode usar o campo de texto para fazer uma pesquisa e encontrar rapidamente os que desejar.

Basicamente, a única coisa que essa segunda tela faz é permitir a seleção das dependências que ficarão no pom.xml do nosso projeto. Nada mais. Mas isso já é de grande ajuda, pois, não precisamos ficar lembrando do groupId e do artifactId de cada uma.

Depois que fizer a seleção das dependências, você pode clicar em Finish. Você vai verificar a seguinte estrutura no seu projeto:

Projeto Spring Boot no Package Explorer

Repare, na imagem acima, que uma classe importante já foi criada. É a classe ArtigoSpringBootApplication:

Ela contém o método main que inicia a nossa aplicação. Engraçado isso, pois, a nossa aplicação será uma aplicação web.

Acontece que o Spring Boot usa um container embarcado (por padrão é o Tomcat) para facilitar o desenvolvimento. Por isso, para iniciar a aplicação, basta executar o método main acima.

Nesse ponto, nosso projeto já está pronto para receber as regras de negócio.

Aplicação para listagem de contatos

Vamos agora criar uma página que vai utilizar o Spring Data JPA, o Spring MVC e o Thymeleaf para listar contatos vindos da base de dados.

Vou começar criando a entidade Contato que vai representar uma tabela do banco de dados:

Quanto a camada de persistência, vou utilizar o Sprint Data JPA para criar o meu repositório de contatos. Vou chamá-lo de Contatos:

Detalhe: não precisamos dar uma implementação para a interface acima. Isso fica a cargo do Spring Data JPA.

A última classe do projeto será o controlador. Chamarei de ContatosController:

Falta ainda nossa página HTML que, com ajuda do Thymeleaf, vai exibir essa lista de contatos para o usuário. Os arquivos HTML são criados, por padrão, dentro do diretório src/main/resources/templates. Então clique com o direito nesse diretório e crie o arquivo contatos.html:

Agora basta você clicar com o direito em cima do projeto, selecionar Run As, depois Spring Boot App e pronto! Já temos uma aplicação rodando. Acesse http://localhost:8080/contatos para conferir.

Caso você não esteja utilizando o STS, então pode rodar o projeto executando o método main da classe ArtigoSpringBootApplication ou ainda, através do terminal, executando o comando:

Ah! Para que você não se depare com uma tabela vazia, crie um arquivo SQL de nome import.sql no diretório src/main/resources com o seguinte conteúdo:

Rodar a aplicação com dados de teste é bem melhor, não é mesmo? :)

Benefícios do DevTools

DevTools é um módulo do Spring Boot que adiciona algumas ferramentas que são interessantes em tempo de desenvolvimento. No momento da criação do projeto, o DevTools foi um dos módulos que selecionei.

Um primeiro benefício dele é quanto a configuração de propriedades úteis para desenvolvimento.

Algumas bibliotecas suportadas pelo Spring Boot usam cache para melhorar sua performance. O Thymeleaf, por exemplo, faz o cache dos seus templates para não ter que recarregá-los a toda vez que forem requisitados. Isso, claro, é muito bom em produção, mas pode atrapalhar em tempo de desenvolvimento.

Para ajudar nessa situação o DevTools configura algumas propriedades com valores que são convenientes em tempo de desenvolvimento. Uma delas, por exemplo, é a que avisa ao Thymeleaf para não fazer cache dos seus templates. Ele deixa spring.thymeleaf.cache como false.

O segundo benefício que gostaria de comentar é a reinicialização automática. Cada arquivo criado nos diretórios que fazem parte do seu classpath serão monitorados e qualquer alteração neles acarretará em uma reinicialização do Spring Boot. Esses diretórios são, basicamente, os diretórios src/main/java e src/main/resources.

Lembrando que alterações em arquivos web estáticos e nos de templates não irão causar uma reinicialização. Eles não precisam.

Um último benefício que quero comentar é o fato do DevTools conter um servidor embarcado do LiveReload. O que esse servidor faz é enviar um aviso para o navegador dizendo que os nossos arquivos estáticos ou os de templates foram alterados. E com isso o navegador atualiza nossa página sozinho.

Para que isso funcione, além do servidor embarcado, é preciso que você instale uma extensão do LiveReload em seu navegador. Você pode encontrá-la no site livereload.com. Logo após a instalação da extensão, você deve acessar a aplicação e clicar no icone do LiveReload.

Como publicar sua aplicação feita com Spring Boot no Heroku

Para fechar com chave de outro, vamos publicar nossa aplicação na internet. Vou dar algumas dicas de como fazer isso utilizando o Heroku.

O Heroku é um serviço de hospedagem que já nos fornece toda a plataforma – como, por exemplo, questões de segurança e o próprio JDK instalado – que precisamos para publicar nosso projeto.

Caso você nunca tenha utilizado o Heroku, então vai precisar de três coisas. A primeira é fazer a instalação do Git (gerenciador de código-fonte). A segunda é fazer o cadastro no site. Por último, você vai precisar instalar o Heroku CLI (para disponibilizar o comando heroku no seu terminal).

Depois, você pode rodar os seguintes comandos no seu terminal:

Veja aplicação rodando no Heroku:

Aplicação com Spring Boot - Lista de contatos

Conclusão

O Spring Boot traz grandes benefícios para quem trabalha com Spring e, nesse artigo, passei um pouco disso.

Vimos sobre o que é o Spring Boot, instalamos o STS e já partimos para o desenvolvimento de uma pequena aplicação para listagem de contatos. Depois, conversei com você sobre o DevTools, que são ferramentas que facilitam nosso trabalho em tempo de desenvolvimento.

Por último, ainda publicamos a aplicação na internet através do Heroku.

Com pouco código e nenhuma configuração, já foi possível publicar uma aplicação, com Spring Boot, na internet. Como você pôde comprovar, ele veio para nos deixar focados no que mais importa: as regras da nossa aplicação.

Se você gostou do que viu nesse artigo, então imagino que vai gostar muito também do nosso e-book Produtividade no Desenvolvimento de Aplicações Web Com Spring Boot:

Produtividade no desenvolvimento de aplicações web com Spring Boot.

Nele temos muito mais detalhes do Spring Boot.

Espero que tenha gostado do artigo. No mais, um abraço pra você e até uma próxima!

PS: você pode baixar o código-fonte de exemplo no nosso GitHub: http://github.com/algaworks/artigo-spring-boot.

É graduado em Sistemas de Informação, trabalha como instrutor na AlgaWorks e está no mercado de programação Java há mais de 8 anos, principalmente no desenvolvimento de sistemas corporativos.

16 comentários sobre “O que é Spring Boot?

  1. Lourival Linard -

    Muito bom artigo!

  2. Alexandre Afonso Autor do post-

    Valeu Lourival!

    1. Alexandre Afonso Autor do post-

      Beleza Vinny? Vi, em uma parte da mensagem (a parte é “No identifier specified for entity”), que está faltando o @Id na sua entidade Contato.

      Abraço!

  3. Bruno -

    Excelente artigo Alexandre, muito obrigado!

  4. Alexandre Afonso Autor do post-

    Valeu Bruno!

  5. Wagner -

    Sou Aluno da AlgaWorks, Excelente Artigo, assim como aquele outro de uma Biblioteca pessoal bem simples para demonstrar como utilizar a plataforma de serviços Heroku, já tinha feito o Workshop Começando com Spring MVC do Prof: Normandes e tinha a curiosidade de como fazer o Deploy entao surgiu esse Grande Instrutor Alexandre Afonso com o caminho das pedras, parabéns.

  6. Alexandre Afonso Autor do post-

    Muito obrigado Wagner!

  7. Carlos Norberto Osilieri -

    Instalei o Spring Tool Suite e ele me enviou o seguinte erro/mensagem:
    Plug-in org.springsource.ide.eclipse.commons.gettingstarted was unable to load class org.springsource.ide.eclipse.commons.gettingstarted.dashboard.WelcomeDashboard.
    Como devo proceder?

  8. Alexandre Afonso Autor do post-

    Beleza Carlos?

    A gente até chegou a falar sobre por e-mail, né? Você tentou a comunidade Java (http://alga.works/comunidadejava) para ver se alguém já teve esse mesmo problema?

    Abraço!

  9. João Arthur -

    Tem previsão de cursos novos ? se sim, quais são ?

  10. Alexandre Afonso Autor do post-

    João, já está sendo planejado um curso de REST. Infelizmente não posso confirmar datas, mas esperamos estar disponível até o meio desse ano.

    Abraço!

  11. Jean -

    Alexandre boa tarde.
    Ótimo conteúdo meus parabéns!!
    Fiquei com uma dúvida com spring boot, como fazer deploy em uma máquina normal, pelo eclipse eu gero o .war e coloco na pasta webapps do tomcat, e usando spring boot como proceder?? Aguardando pelo curso de REST. =)

  12. Alexandre Afonso Autor do post-

    Valeu Jean!

    Basta fazer o seguinte: “$ java -jar target/seujar.jar”

    Bacana que está interessado no curso de REST. O Normandes está trabalhando bastante nele.

    Abraço!

  13. Rodrigo -

    Duvida conceitual: Já li muito a respeito do Spring-boot mas ainda não caiu a ficha, vamos dizer assim. Imagina que eu sou um desenv acostumado com o velho paradigma: java war + varias dependências jar criadas por mim (libs) + um servidor de aplicação (jboss), sql, etc. Onde entra o boot nisso tudo? O que vai mudar? Como funciona em ambiente de produção? O deploy ainda é no velho app server, ou o boot roda standalone, como um micro serviço? Questões como load balance, e tal? Como ficam?

    Obrigado!

    1. Alexandre Afonso Autor do post-

      Rodrigo,

      Nesses pontos aí que você mencionou, não muda muita coisa. A única diferença é que ele já tem um servidor interno e não é preciso (apesar de ser possível) usar um servidor externo (como o Tomcat, por exemplo). O que muda mesmo é em tempo de desenvolvimento, pois, ele já traz várias coisas pré-configuradas para que possamos ser mais ágeis.

      Abraço!

Deixe um comentário