Cursos
Sobre
Contato
Receber Noti cações
SPRING
O que é Spring Boot?
Escrito por Alexandre Afonso
em 02/02/2017
Facebook WhatsApp Twitter LinkedIn E-mail Mais... 26
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:
Receber Noti cações
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
Vamos lá?
O que é Spring Boot?
O que é Spring Boot e quais as vantagens de usá-lo?
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,
Receber Noti cações
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 [Link] 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 [Link] 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 [Link] 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: [Link]
Receber Noti cações
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:
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:
Receber Noti cações
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 [Link] do nosso projeto.
Nada mais. Mas isso já é de grande ajuda, pois, não precisamos ficar
Receber Noti cações
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:
Repare, na imagem acima, que uma classe importante já foi criada. É a
classe ArtigoSpringBootApplication :
1 package [Link];
2
3 import [Link];
4 import [Link]
5
6 @SpringBootApplication
7 public class ArtigoSpringBootApplication {
8
9 public static void main(String[] args) {
10 [Link]([Link], args
11 }
12
13 }
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.
Receber Noti cações
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:
1 @Entity
2 public class Contato implements Serializable {
3
4 private static final long serialVersionUID = 1L;
5
6 @Id
7 @GeneratedValue(strategy = [Link])
8 private Long id;
9
10 private String nome;
11
12 private String email;
13
14 // getters e setters omitidos
15 }
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 :
1 public interface Contatos extends JpaRepository<Contato, Long> {
2 }
Receber Noti cações
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 :
1 @Controller
2 @RequestMapping("/contatos")
3 public class ContatosController {
4
5 @Autowired
6 private Contatos contatos;
7
8 @GetMapping
9 public ModelAndView listar() {
10 List<Contato> lista = [Link]();
11
12 ModelAndView modelAndView = new ModelAndView("contatos");
13 [Link]("contatos", lista);
14
15 return modelAndView;
16 }
17
18 }
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 [Link] :
1 <!DOCTYPE html>
2 <html xmlns:th="[Link]
3 <head>
4 <title>Listagem de contatos utilizando o Spring Boot</title>
5 </head>
6
7 <body>
8 <h1>Lista de contatos</h1>
9 <table>
10 <thead>
11 <tr>
12 <th>#</th>
13 <th>Nome</th>
14 <th>E-mail</th>
15 </tr>
Receber Noti cações
16 </thead>
17 <tbody>
18 <tr th:each="contato: ${contatos}">
19 <td th:text="${[Link]}"></td>
20 <td th:text="${[Link]}"></td>
21 <td th:text="${[Link]}"></td>
22 </tr>
23 </tbody>
24 </table>
25 </body>
26 </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 [Link] 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:
$ mvn clean package spring-boot:run
Ah! Para que você não se depare com uma tabela vazia, crie um arquivo
SQL de nome [Link] no diretório src/main/resources com o
seguinte conteúdo:
1 insert into Contato (id, nome, email) values (1, 'William Douglas'
2 insert into Contato (id, nome, email) values (2, 'Al Ries', 'alrie
3 insert into Contato (id, nome, email) values (3, 'Mortimer J. Adle
4 insert into Contato (id, nome, email) values (4, 'Christian Barbos
Rodar a aplicação com dados de teste é bem melhor, não é mesmo? :)
Benefícios do DevTools
Receber Noti cações
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 [Link] 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
Receber Noti cações
encontrá-la no site [Link]. Logo após a instalação da extensão,
você deve acessar a aplicação e clicar no icone do LiveReload.
Spring Boot VS Spring MVC
Spring Boot ou Spring MVC? Qual é melhor?
Quem aprende Spring começando com Spring Boot pode pensar que ele
é um framework web. Isso é porque muitos exemplos com o Spring Boot,
como o nosso caso, são de aplicações web.
Acontece que usar Spring Boot, sem o Spring MVC, não faz, do seu
projeto, um projeto web.
Spring Boot e Spring MVC são frameworks diferentes. O primeiro nos
ajuda com tarefas de infraestrutura do nosso projeto e o segundo nos
ajuda a tratar requisições web.
Como publicar sua aplicação feita com
Receber Noti cações
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:
$ cd /pasta/do/projeto/gestao-contatos
$ git init; git add .; git commit -m "Versão concluída."
$ heroku login # login pelo terminal (utilize mesmo usuário e senha do
$ heroku create # cria a sua aplicação lá no Heroku
$ git push heroku master # envia sua aplicação para o Heroku
$ heroku open # abre sua aplicação no navegador
Veja aplicação rodando no Heroku:
Receber Noti cações
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:
Receber Noti cações
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:
[Link]
Alexandre Afonso
É graduado em Sistemas de Informação, trabalha como instrutor na
AlgaWorks e está no mercado de programação Java há mais de 9 anos,
principalmente no desenvolvimento de sistemas corporativos.
Artigos relacionados
Receber Noti cações
SPRING
O que é Spring Security?
JAVASERVER FACES
Domine o componente FileUpload do PrimeFaces
Receber Noti cações
SPRING
O que é Spring MVC?
JAVA E OO
Entenda a variável serialVersionUID e sua importância na arquitetura
Java
Olá,
o que você achou deste conteúdo? Conte nos comentários.
44 Comentários Blog da AlgaWorks
1 Entrar
Recomendar t Tweet f Compartilhar
Ordenar por Mais votados
Receber Noti cações
Participe da discussão...
FAZER LOGIN COM
OU REGISTRE-SE NO DISQUS ?
Nome
Eduardo • um ano atrás
Boa tarde Alexandre, excelente, muito obrigado,
Estou com uma dúvida, criei uma pasta chamada "relatorios"
fora da estrutura da aplicação onde colocarei arquivos pdf, png,
jpeg, etc, estou tentando visualizar o arquivo, mas não consigo,
por exemplo: [Link]
Na url acima /relatorios/ não é uma controller, mas sim a pasta
que criei, porém o spring não me permite visualizar pelo
browser.
É possível fazer com que a aplicação permita essa simples
visualização sem utilizar uma controller?
Obrigado
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso Mod > Eduardo • um ano atrás
@Eduardo, você teria que usar configurações como
essas: [Link]
Abraço.
△ ▽ • Responder • Compartilhar ›
Vasconcelos • um ano atrás
Muito bacana
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso Mod > Vasconcelos • um ano atrás
Valeu @Vasconcelos!
△ ▽ • Responder • Compartilhar ›
lusabo • um ano atrás
Alexandre, teria como fazer um artigo mostrando como criar um
sistema de autenticação e autorização com jwt e o Spring Boot?
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso Mod > lusabo • um ano atrás
Olá lusabo!
Bacana esse tema pra um conteúdo. Anoitei o tema aqui
para podermos considerar nos próximos conteúdos que
Receber Noti cações
planejarmos criar.
Abraço.
△ ▽ • Responder • Compartilhar ›
Rhadamez • um ano atrás
Alexandre
Como saber as versões das bibliotecas que o Spring boot está
utilizando no maven?
△ ▽ • Responder • Compartilhar ›
Eduardo Rodrigues - AlgaWorks Mod > Rhadamez
• um ano atrás
Olá Rhadamez!
Você pode utilizar o comando: "mvn dependency:tree "
Ele irá mostrar a árvore de dependências do seu projeto,
assim você verá todas dependências existentes no seu
projeto, incluindo a versão de cada uma.
Até!
△ ▽ • Responder • Compartilhar ›
Jorge • um ano atrás
Olá.
Baixei a versão 3.9.2 x86 para iniciar os estudos e o Tomcat não
é inicializado. Como resolver ?
Obrigado.
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Jorge • um ano atrás
Olá Jorge!
Que erro está aparecendo pra você?
△ ▽ • Responder • Compartilhar ›
Paulo • 2 anos atrás
Ótimo. Entendi perfeitamente.
Obrigado pela resposta.
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Paulo • 2 anos atrás
Bacana.
Por nada!
△ ▽ • Responder • Compartilhar ›
Paulo Júnior • 2 anos atrás
Olá Alexandre.
Receber Noti cações
Seu artigo é excelente! Vai direto ao ponto e é muito didático
também. Parabéns pelo seu trabalho.
Estou com uma dúvida sobre um tema que não foi abordado no
artigo, mas talvez você possa me ajudar, com base em sua
experiência.
Quero desenvolver uma API Rest, com Spring, e consumi-la via
um app móvel. Contudo, eu também gostaria de oferecer aos
meus usuários uma *view* por meio de um website.
Em sua opinião, qual é a melhor forma de resolver esse
problema?
Eu pensei em criar dois controladores, um para REST, que
devolve dados no formato JSON, e outro para *webpages*, que
devolve HTML.
ver mais
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Paulo Júnior • 2 anos atrás
Olá Paulo!
Nesse seu caso eu recomendo você pensar em sua view
web da mesmo forma que pensa na aplicação mobile.
Claro que estamos falando de tecnologias diferentes. O
que quero dizer é que você deve pensar em sua página
web como um cliente do seu serviço REST.
Essa arquitetura sai da proposta do artigo (Spring Boot +
Thymeleaf).
Pra isso você poderia construir uma SPA:
Single-Page Applications: O que é, va…
va…
ver mais
△ ▽ • Responder • Compartilhar ›
Thiago670 • 2 anos atrás
Kra que artigo simples, claro e objetivo. Parabéns!
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Thiago670 • 2 anos atrás
Valeu Thiago!
△ ▽ • Responder • Compartilhar ›
Receber Noti cações
Pedro • 2 anos atrás
importei o projecto spring master na minha maquina e não
consigo exutar.
como faço??
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Pedro • 2 anos atrás
Pedro, boa tarde!
Você precisa ter o Maven instalado e então, pelo
terminal, rodar o comando "$ mvn clean package spring-
boot:run". Ou, pelo STS, você vai até a aba Boot
Dashboard e clica no botão com a seta verde e o
quadrado vermelho.
Você pode também baixar o e-book nosso para mais
detalhes: [Link]
Abraço!
△ ▽ • Responder • Compartilhar ›
Flávio • 2 anos atrás
Excelente artigo Alexandre,.
Veja só.. Testei essa mesma aplicação do artigo. Criei o
[Link] , mas não aparece na página. Ou, de fato mesmo
preciso configurar meu banco ??
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Flávio • 2 anos atrás
Valeu Flávio!
Como estamos usando o H2 como banco de dados,
então não precisa configurar.
Tem alguns detalhes que pode olhar:
* Se o nome do arquivo SQL está correto e se está no
local correto;
* E também olha se o controlador está conseguindo
pegar os dados do repositório e também se estão sendo
passados para o modelo da página;
Abraço!
△ ▽ • Responder • Compartilhar ›
Ricardo • 2 anos atrás
Muito bom! Pra ficar melhor, vc poderia disponibilizar o fonte do
html com o css que gerou a tela que exibida no artigo, ok?
Receber Noti cações
Abraço
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Ricardo • 2 anos atrás
Bacana que gostou Ricardo!
Sim, em nossos artigos práticos, sempre fazemos isso.
Geralmente fica no final do artigo. Mas para facilitar, o
link é esse: [Link]
Abraço!
△ ▽ • Responder • Compartilhar ›
Bruno Gasparotto • 2 anos atrás
Ótimo tutorial Alexandre, mostra bem rapidamente a
simplicidade do Spring.
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Bruno Gasparotto • 2 anos atrás
Valeu Bruno! Que bom que gostou. :)
Abraço!
△ ▽ • Responder • Compartilhar ›
Bianca Barros • 2 anos atrás
Ola, gostaria de saber como faço para por a minha aplicação do
spring boot no heroku usando o postgresql, poderia me dar um
passo a passo?
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Bianca Barros • 2 anos atrás
Olá Bianca!
Dá uma olhada em nosso e-book que lá o projeto é
publicado com o PostgreSQL:
[Link]
Abraço!
△ ▽ • Responder • Compartilhar ›
Fenando • 2 anos atrás
Gostei Muito Parabéns!
Gosto de Estudar Java
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Fenando • 2 anos atrás
Legal que curtiu Fernando!
Abraço!
△ ▽ • Responder • Compartilhar ›
Receber Noti cações
Rodrigo • 2 anos atrás
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!
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso > Rodrigo • 2 anos atrás
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!
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso • 2 anos atrás
Valeu Jean!
Basta fazer o seguinte: "$ java -jar target/[Link]"
Bacana que está interessado no curso de REST. O Normandes
está trabalhando bastante nele.
Abraço!
△ ▽ • Responder • Compartilhar ›
Jean • 2 anos atrás
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. =)
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso • 2 anos atrás
João, já está sendo planejado um curso de REST. Infelizmente
Receber Noti cações
não posso confirmar datas, mas esperamos estar disponível até
o meio desse ano.
Abraço!
△ ▽ • Responder • Compartilhar ›
João Arthur • 2 anos atrás
Tem previsão de cursos novos ? se sim, quais são ?
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso • 2 anos atrás
Beleza Carlos?
A gente até chegou a falar sobre por e-mail, né? Você tentou a
comunidade Java ([Link] para ver se
alguém já teve esse mesmo problema?
Abraço!
△ ▽ • Responder • Compartilhar ›
Carlos Norberto Osilieri • 3 anos atrás
Instalei o Spring Tool Suite e ele me enviou o seguinte
erro/mensagem:
Plug-in [Link] was
unable to load class
[Link].W
Como devo proceder?
△ ▽ • Responder • Compartilhar ›
Alexandre Afonso • 3 anos atrás
Muito obrigado Wagner!
△ ▽ • Responder • Compartilhar ›
Wagner • 3 anos atrás
Sou Aluno da AlgaWorks, Excelente Artigo, assim como aquele
outro de uma Biblioteca pessoal bem simples para demonstrar
Junte-se a mais de 100.000 pessoas
Entre para nossa lista e receba conteúdos exclusivos e com prioridade
Receber Noti cações
Qual seu melhor email? Cadastrar email
AlgaWorks
Cursos
Sobre
Contato
Categorias
Angular
AngularJS
DevOps
Entrevistas
Java e OO
JavaServer Faces
JPA e Hibernate
Programação
Spring
AlgaWorks Softwares, Treinamentos e Serviços Ltda - CNPJ: 10.687.566/0001-97 © 2012 AlgaWorks.
Todos os direitos reservados. Leia nossa Política de privacidade e Termos de uso.