SlideShare a Scribd company logo
1 of 51
Download to read offline
Aumente sua produtividade
com Spring Boot
Fernando Boaglio
Quem é Fernando Boaglio ?
8 Javeiros que você deveria conhecer !
8 Javeiros que você deveria conhecer !
James Gosling Joshua Bloch Duncan Davison Marc Fleury
Rod Johnson Kent Beck Craig Mcclanahan Gavin King
8 Javeiros que você deveria conhecer !
Criador do Java JDK 5 / Effective Java Tomcat / ANT JBoss
Expert One-on-One XP / TDD / Junit Struts Hibernate / EJB3
J2EE Design and
Development
2002 J2EE = EJB 2.x
Só havia um pequeno problema:
o tempo gasto com requisitos
não funcionais muitas vezes era
MAIOR
que com os funcionais.
Objetivos de Rod Johnson
- desenvolvimento mais simples que o J2EE
- voltado para interfaces
- bom design OO
- facilitar a criação de testes
- agradável de usar
- deve integrar com soluções existentes
- open source
2004 Spring 1.0
Enquanto isso...
2008 - empresa Interface 21 renomeada
SpringSource
2009 – Oracle compra Sun Microsystems
por US$13 bi
2009 – VMWare compra SpringSource
por US$420 mi
2013 - VMware + EMC cria a Pivotal, focada
em sistemas (Spring vai junto)
Linha do tempo Java EE e Spring
2015
2016
Spring projects em 2003
Spring projects em 2016 (resumido)
Motivo 1 para criação do Spring Boot
O crescimento do Spring trouxe problemas!
- muitos módulos
- muitas dependências
- configuração já não é tão simples
O crescimento dos Micro Services
servidor pesado rodando uma aplicação
com 10 serviços é trocado por 10 servidores
leves rodando apenas um serviço
Motivo 2 para criação do Spring Boot
Vamos ao que interessa… como usar???
Baixe e instale o Spring Tools Suite
https://spring.io/tools
Criando um projeto exemplo
Criando um projeto exemplo
Criando um projeto exemplo online
Rodando o projeto exemplo
Rodando o projeto exemplo
Acessando a raiz
Criando uma tela inicial
package com.example;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TesteController {
@RequestMapping("/")
String home() {
return "Olá Javeiros!";
}
}
Acessando a raiz
Arquivo 1 de 2 gerado – pom.xml (Maven)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>relativePath /> <!-- lookup parent from repository -->
</parent>
<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>
Arquivo 2 de 2 gerado – Java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Muitas coisas aconteram
- Servidor leve no ar
- Dependências carregadas
automaticamente
- Dependências configuradas
automaticamente
- Convenção sobre configuração
Adicionar suporte ao Spring Data–MongoDB
package com.example;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.annotation.Id;
public class Meetup {
@Id
private String titulo;
private LocalDate data;
private List<String> participantes;
public Meetup() {
}
public Meetup(String titulo, LocalDate data, List<String> participantes) {
this.titulo = titulo;
this.data = data;
this.participantes = participantes;
}
@Override
public String toString() {
return "Meetup [titulo=" + titulo + ", data=" + data + ", participantes=" + participantes + "]";
}
// getters e setters
Adicionar suporte ao Spring Data–MongoDB
package com.example;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface MeetupRepository extends MongoRepository<Meetup, String> {
public Meetup findByTitulo(String titulo);
public List<Meetup> findAll();
}
Adicionado suporte ao MongoDB
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Adicionar suporte ao Spring Data–MongoDB
@SpringBootApplication
public class SampleMongoApplication implements CommandLineRunner {
@Autowired
private MeetupRepository repository;
@Override
public void run(String... args) throws Exception {
this.repository.deleteAll();
List<String> participantes = new ArrayList<String>();
participantes.add("Bruno");
participantes.add("Felipe");
participantes.add("Fernando");
LocalDate diaDoMeetup = LocalDate.of(2016, Month.SEPTEMBER, 1);
String titulo ="12o Meetup";
// gravando
System.out.println("Gravando:");
System.out.println("-------------------------------");
this.repository.save(
new Meetup(titulo, diaDoMeetup, participantes ));
Adicionar suporte ao Spring Data–MongoDB
// buscando
System.out.println("Busca todos:");
System.out.println("-------------------------------");
for (Meetup meetup : this.repository.findAll()) {
System.out.println(meetup);
}
System.out.println();
// buscando por titulo
System.out.println("Busca por titulo:");
System.out.println("--------------------------------");
System.out.println(this.repository.findByTitulo(titulo));
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleMongoApplication.class, args);
}
}
Adicionar suporte ao Spring Data–MongoDB
Adicionar suporte ao Spring Data–MongoDB
Comentando findAll também funciona!
package com.example;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface MeetupRepository
extends MongoRepository<Meetup, String> {
public Meetup findByTitulo
(String titulo);
}
Adicionado suporte ao MongoDB + ReST
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Adicionar suporte ReST
package com.example;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/meetup")
public class MeetupController {
@Autowired
private MeetupRepository repository;
@RequestMapping(method = RequestMethod.GET)
public List<Meetup> findAll() {
return repository.findAll();
}
@RequestMapping(value = "{titulo}", method = RequestMethod.GET)
Meetup findById(@PathVariable("titulo") String titulo) {
return repository.findByTitulo(titulo);
}
}
Testando os serviços criados
Testando os serviços criados
Testando os serviços ReST
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
public void apiNoAr() throws Exception {
this.mockMvc.perform(get("/api/meetup")).
andDo(print()).
andExpect(status().isOk());
}
@Test
public void apiBuscaTodos() throws Exception {
this.mockMvc.perform(get("/api/meetup")).andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].titulo").value("12o Meetup"));
}
}
Deploy do seu microserviço
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<mainClass>com.example.DemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Deploy do seu microserviço
$ mvn package
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ demo ---
[INFO] Building jar: /home/fb/workspace-sts/demo/target/demo-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.4.0.RELEASE:repackage (default) @ demo ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.346 s
[INFO] Finished at: 2016-08-28T14:55:14-03:00
[INFO] Final Memory: 29M/233M
[INFO] ------------------------------------------------------------------------
Executando seu microserviço
$ java -jar <arquivo-gerado>.jar
Gerar um WAR do seu serviço
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
E tem mais...
- Integração com Spring Cloud
- Eureka
- Hystrix
Leitura recomendada de Spring...
Em breve mais um livro...

More Related Content

What's hot

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)Rodrigo Serradura
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Felipe Mamud
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
Conectando o Android a outros sistemas
Conectando o Android a outros sistemasConectando o Android a outros sistemas
Conectando o Android a outros sistemasElias Junior
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - BrazilStephen Chin
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLgsroma
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 

What's hot (20)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 
Python 06
Python 06Python 06
Python 06
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Conectando o Android a outros sistemas
Conectando o Android a outros sistemasConectando o Android a outros sistemas
Conectando o Android a outros sistemas
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Spring boot
Spring bootSpring boot
Spring boot
 
Aula02 eclipse quem_es_tu
Aula02 eclipse quem_es_tuAula02 eclipse quem_es_tu
Aula02 eclipse quem_es_tu
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 
Introdução a projetos baseados em apache maven
Introdução a projetos baseados em apache mavenIntrodução a projetos baseados em apache maven
Introdução a projetos baseados em apache maven
 
Apresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache MavenApresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache Maven
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 

Viewers also liked

Análise de qualidade de código com Sonar - Fernando Boaglio
Análise de qualidade de código com Sonar - Fernando Boaglio Análise de qualidade de código com Sonar - Fernando Boaglio
Análise de qualidade de código com Sonar - Fernando Boaglio Fernando Boaglio
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEBRafael Chinelato Del Nero
 
Tupiniquizando o desktop com KDE
Tupiniquizando o desktop com KDETupiniquizando o desktop com KDE
Tupiniquizando o desktop com KDEFernando Boaglio
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014Fernando Boaglio
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Fernando Boaglio
 

Viewers also liked (6)

Análise de qualidade de código com Sonar - Fernando Boaglio
Análise de qualidade de código com Sonar - Fernando Boaglio Análise de qualidade de código com Sonar - Fernando Boaglio
Análise de qualidade de código com Sonar - Fernando Boaglio
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
 
Tupiniquizando o desktop com KDE
Tupiniquizando o desktop com KDETupiniquizando o desktop com KDE
Tupiniquizando o desktop com KDE
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 

Similar to Aumente sua produtividade com Spring Boot

TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
SpringSource Tool Suite, tc Server e dm Server
SpringSource Tool Suite, tc Server e dm ServerSpringSource Tool Suite, tc Server e dm Server
SpringSource Tool Suite, tc Server e dm ServerDr. Spock
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosphelypploch
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.jsDenis Velrino
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 

Similar to Aumente sua produtividade com Spring Boot (20)

TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
SpringSource Tool Suite, tc Server e dm Server
SpringSource Tool Suite, tc Server e dm ServerSpringSource Tool Suite, tc Server e dm Server
SpringSource Tool Suite, tc Server e dm Server
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Apache Ant
Apache AntApache Ant
Apache Ant
 
Slides da palestra no Flex mania 2011
Slides da palestra no Flex mania 2011Slides da palestra no Flex mania 2011
Slides da palestra no Flex mania 2011
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 

More from Fernando Boaglio

O seu negocio precisa de API Gateway
O seu negocio precisa de API Gateway O seu negocio precisa de API Gateway
O seu negocio precisa de API Gateway Fernando Boaglio
 
Java Meetup SP- pesquisa 2019
Java Meetup SP- pesquisa 2019Java Meetup SP- pesquisa 2019
Java Meetup SP- pesquisa 2019Fernando Boaglio
 
3 dicas para ser um profissional melhor
3 dicas para ser um profissional melhor3 dicas para ser um profissional melhor
3 dicas para ser um profissional melhorFernando Boaglio
 
Jenkins, de onde veio e para onde vai
Jenkins, de onde veio e para onde vai Jenkins, de onde veio e para onde vai
Jenkins, de onde veio e para onde vai Fernando Boaglio
 
Nao perca tempo com bancos de dados relacionais, use mongo db
Nao perca tempo com bancos de dados relacionais,   use mongo dbNao perca tempo com bancos de dados relacionais,   use mongo db
Nao perca tempo com bancos de dados relacionais, use mongo dbFernando Boaglio
 
6 mitos de projetos open source para Java
6 mitos de projetos open source para Java6 mitos de projetos open source para Java
6 mitos de projetos open source para JavaFernando Boaglio
 
MongoDB com Java - GUOB 2018
MongoDB com Java  - GUOB  2018MongoDB com Java  - GUOB  2018
MongoDB com Java - GUOB 2018Fernando Boaglio
 
5 motivos para usar JNoSQL - Fernando Boaglio - TDC2018
5 motivos para usar JNoSQL - Fernando Boaglio - TDC20185 motivos para usar JNoSQL - Fernando Boaglio - TDC2018
5 motivos para usar JNoSQL - Fernando Boaglio - TDC2018Fernando Boaglio
 
Jenkins por dentro e por fora - Oracle Code São Paulo 2018
Jenkins por dentro e por fora - Oracle Code São Paulo 2018Jenkins por dentro e por fora - Oracle Code São Paulo 2018
Jenkins por dentro e por fora - Oracle Code São Paulo 2018Fernando Boaglio
 
Katalon,o Selenium fácil
Katalon,o Selenium fácil Katalon,o Selenium fácil
Katalon,o Selenium fácil Fernando Boaglio
 
SAP Hybris e SAP HANA - o que dá para usar?
 SAP Hybris e SAP HANA - o que dá para usar?  SAP Hybris e SAP HANA - o que dá para usar?
SAP Hybris e SAP HANA - o que dá para usar? Fernando Boaglio
 
Jenkins por dentro e por fora
Jenkins por dentro e por fora Jenkins por dentro e por fora
Jenkins por dentro e por fora Fernando Boaglio
 
MongoDB com Java - SouJava
MongoDB com Java - SouJavaMongoDB com Java - SouJava
MongoDB com Java - SouJavaFernando Boaglio
 

More from Fernando Boaglio (20)

Rinha de Back-end 2023
Rinha de Back-end 2023Rinha de Back-end 2023
Rinha de Back-end 2023
 
Java Meetup SP
Java Meetup SP Java Meetup SP
Java Meetup SP
 
Testando jwebserver
Testando jwebserver Testando jwebserver
Testando jwebserver
 
Novidades Spring 2021
Novidades Spring 2021Novidades Spring 2021
Novidades Spring 2021
 
O seu negocio precisa de API Gateway
O seu negocio precisa de API Gateway O seu negocio precisa de API Gateway
O seu negocio precisa de API Gateway
 
Retrospectiva Java 2019
Retrospectiva Java 2019Retrospectiva Java 2019
Retrospectiva Java 2019
 
Java Meetup SP- pesquisa 2019
Java Meetup SP- pesquisa 2019Java Meetup SP- pesquisa 2019
Java Meetup SP- pesquisa 2019
 
3 dicas para ser um profissional melhor
3 dicas para ser um profissional melhor3 dicas para ser um profissional melhor
3 dicas para ser um profissional melhor
 
Jenkins, de onde veio e para onde vai
Jenkins, de onde veio e para onde vai Jenkins, de onde veio e para onde vai
Jenkins, de onde veio e para onde vai
 
Java Meetup SP intro
Java Meetup SP  introJava Meetup SP  intro
Java Meetup SP intro
 
Nao perca tempo com bancos de dados relacionais, use mongo db
Nao perca tempo com bancos de dados relacionais,   use mongo dbNao perca tempo com bancos de dados relacionais,   use mongo db
Nao perca tempo com bancos de dados relacionais, use mongo db
 
6 mitos de projetos open source para Java
6 mitos de projetos open source para Java6 mitos de projetos open source para Java
6 mitos de projetos open source para Java
 
Java Meetup SP intro
Java Meetup SP introJava Meetup SP intro
Java Meetup SP intro
 
MongoDB com Java - GUOB 2018
MongoDB com Java  - GUOB  2018MongoDB com Java  - GUOB  2018
MongoDB com Java - GUOB 2018
 
5 motivos para usar JNoSQL - Fernando Boaglio - TDC2018
5 motivos para usar JNoSQL - Fernando Boaglio - TDC20185 motivos para usar JNoSQL - Fernando Boaglio - TDC2018
5 motivos para usar JNoSQL - Fernando Boaglio - TDC2018
 
Jenkins por dentro e por fora - Oracle Code São Paulo 2018
Jenkins por dentro e por fora - Oracle Code São Paulo 2018Jenkins por dentro e por fora - Oracle Code São Paulo 2018
Jenkins por dentro e por fora - Oracle Code São Paulo 2018
 
Katalon,o Selenium fácil
Katalon,o Selenium fácil Katalon,o Selenium fácil
Katalon,o Selenium fácil
 
SAP Hybris e SAP HANA - o que dá para usar?
 SAP Hybris e SAP HANA - o que dá para usar?  SAP Hybris e SAP HANA - o que dá para usar?
SAP Hybris e SAP HANA - o que dá para usar?
 
Jenkins por dentro e por fora
Jenkins por dentro e por fora Jenkins por dentro e por fora
Jenkins por dentro e por fora
 
MongoDB com Java - SouJava
MongoDB com Java - SouJavaMongoDB com Java - SouJava
MongoDB com Java - SouJava
 

Aumente sua produtividade com Spring Boot

  • 1. Aumente sua produtividade com Spring Boot Fernando Boaglio
  • 2. Quem é Fernando Boaglio ?
  • 3. 8 Javeiros que você deveria conhecer !
  • 4. 8 Javeiros que você deveria conhecer ! James Gosling Joshua Bloch Duncan Davison Marc Fleury Rod Johnson Kent Beck Craig Mcclanahan Gavin King
  • 5. 8 Javeiros que você deveria conhecer ! Criador do Java JDK 5 / Effective Java Tomcat / ANT JBoss Expert One-on-One XP / TDD / Junit Struts Hibernate / EJB3 J2EE Design and Development
  • 6. 2002 J2EE = EJB 2.x
  • 7. Só havia um pequeno problema: o tempo gasto com requisitos não funcionais muitas vezes era MAIOR que com os funcionais.
  • 8. Objetivos de Rod Johnson - desenvolvimento mais simples que o J2EE - voltado para interfaces - bom design OO - facilitar a criação de testes - agradável de usar - deve integrar com soluções existentes - open source
  • 10. Enquanto isso... 2008 - empresa Interface 21 renomeada SpringSource 2009 – Oracle compra Sun Microsystems por US$13 bi 2009 – VMWare compra SpringSource por US$420 mi 2013 - VMware + EMC cria a Pivotal, focada em sistemas (Spring vai junto)
  • 11. Linha do tempo Java EE e Spring
  • 12. 2015
  • 13. 2016
  • 15. Spring projects em 2016 (resumido)
  • 16.
  • 17. Motivo 1 para criação do Spring Boot O crescimento do Spring trouxe problemas! - muitos módulos - muitas dependências - configuração já não é tão simples
  • 18. O crescimento dos Micro Services servidor pesado rodando uma aplicação com 10 serviços é trocado por 10 servidores leves rodando apenas um serviço Motivo 2 para criação do Spring Boot
  • 19. Vamos ao que interessa… como usar???
  • 20. Baixe e instale o Spring Tools Suite https://spring.io/tools
  • 23. Criando um projeto exemplo online
  • 24. Rodando o projeto exemplo
  • 25. Rodando o projeto exemplo
  • 27. Criando uma tela inicial package com.example; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TesteController { @RequestMapping("/") String home() { return "Olá Javeiros!"; } }
  • 29. Arquivo 1 de 2 gerado – pom.xml (Maven) <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version>relativePath /> <!-- lookup parent from repository --> </parent> <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>
  • 30. Arquivo 2 de 2 gerado – Java package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
  • 31. Muitas coisas aconteram - Servidor leve no ar - Dependências carregadas automaticamente - Dependências configuradas automaticamente - Convenção sobre configuração
  • 32. Adicionar suporte ao Spring Data–MongoDB package com.example; import java.time.LocalDate; import java.util.List; import org.springframework.data.annotation.Id; public class Meetup { @Id private String titulo; private LocalDate data; private List<String> participantes; public Meetup() { } public Meetup(String titulo, LocalDate data, List<String> participantes) { this.titulo = titulo; this.data = data; this.participantes = participantes; } @Override public String toString() { return "Meetup [titulo=" + titulo + ", data=" + data + ", participantes=" + participantes + "]"; } // getters e setters
  • 33. Adicionar suporte ao Spring Data–MongoDB package com.example; import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; public interface MeetupRepository extends MongoRepository<Meetup, String> { public Meetup findByTitulo(String titulo); public List<Meetup> findAll(); }
  • 34. Adicionado suporte ao MongoDB <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
  • 35. Adicionar suporte ao Spring Data–MongoDB @SpringBootApplication public class SampleMongoApplication implements CommandLineRunner { @Autowired private MeetupRepository repository; @Override public void run(String... args) throws Exception { this.repository.deleteAll(); List<String> participantes = new ArrayList<String>(); participantes.add("Bruno"); participantes.add("Felipe"); participantes.add("Fernando"); LocalDate diaDoMeetup = LocalDate.of(2016, Month.SEPTEMBER, 1); String titulo ="12o Meetup"; // gravando System.out.println("Gravando:"); System.out.println("-------------------------------"); this.repository.save( new Meetup(titulo, diaDoMeetup, participantes ));
  • 36. Adicionar suporte ao Spring Data–MongoDB // buscando System.out.println("Busca todos:"); System.out.println("-------------------------------"); for (Meetup meetup : this.repository.findAll()) { System.out.println(meetup); } System.out.println(); // buscando por titulo System.out.println("Busca por titulo:"); System.out.println("--------------------------------"); System.out.println(this.repository.findByTitulo(titulo)); } public static void main(String[] args) throws Exception { SpringApplication.run(SampleMongoApplication.class, args); } }
  • 37. Adicionar suporte ao Spring Data–MongoDB
  • 38. Adicionar suporte ao Spring Data–MongoDB
  • 39. Comentando findAll também funciona! package com.example; import org.springframework.data.mongodb.repository.MongoRepository; public interface MeetupRepository extends MongoRepository<Meetup, String> { public Meetup findByTitulo (String titulo); }
  • 40. Adicionado suporte ao MongoDB + ReST <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
  • 41. Adicionar suporte ReST package com.example; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/meetup") public class MeetupController { @Autowired private MeetupRepository repository; @RequestMapping(method = RequestMethod.GET) public List<Meetup> findAll() { return repository.findAll(); } @RequestMapping(value = "{titulo}", method = RequestMethod.GET) Meetup findById(@PathVariable("titulo") String titulo) { return repository.findByTitulo(titulo); } }
  • 44. Testando os serviços ReST @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class DemoApplicationTests { @Autowired private MockMvc mockMvc; @Test public void apiNoAr() throws Exception { this.mockMvc.perform(get("/api/meetup")). andDo(print()). andExpect(status().isOk()); } @Test public void apiBuscaTodos() throws Exception { this.mockMvc.perform(get("/api/meetup")).andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$[0].titulo").value("12o Meetup")); } }
  • 45. Deploy do seu microserviço <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> <mainClass>com.example.DemoApplication</mainClass> </configuration> </plugin> </plugins> </build>
  • 46. Deploy do seu microserviço $ mvn package Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ demo --- [INFO] Building jar: /home/fb/workspace-sts/demo/target/demo-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.4.0.RELEASE:repackage (default) @ demo --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.346 s [INFO] Finished at: 2016-08-28T14:55:14-03:00 [INFO] Final Memory: 29M/233M [INFO] ------------------------------------------------------------------------
  • 47. Executando seu microserviço $ java -jar <arquivo-gerado>.jar
  • 48. Gerar um WAR do seu serviço <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging>
  • 49. E tem mais... - Integração com Spring Cloud - Eureka - Hystrix
  • 51. Em breve mais um livro...