aumente sua produtividade com spring boot

51
Aumente sua produtividade com Spring Boot Fernando Boaglio

Upload: fernando-boaglio

Post on 11-Apr-2017

172 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Aumente sua produtividade com Spring Boot

Aumente sua produtividade com Spring Boot

Fernando Boaglio

Page 2: Aumente sua produtividade com Spring Boot

Quem é Fernando Boaglio ?

Page 3: Aumente sua produtividade com Spring Boot

8 Javeiros que você deveria conhecer !

Page 4: Aumente sua produtividade com Spring Boot

8 Javeiros que você deveria conhecer !

James Gosling Joshua Bloch Duncan Davison Marc Fleury

Rod Johnson Kent Beck Craig Mcclanahan Gavin King

Page 5: Aumente sua produtividade com Spring Boot

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 / EJB3J2EE Design and Development

Page 6: Aumente sua produtividade com Spring Boot

2002 J2EE = EJB 2.x

Page 7: Aumente sua produtividade com Spring Boot

Só havia um pequeno problema:

o tempo gasto com requisitosnão funcionais muitas vezes era MAIORque com os funcionais.

Page 8: Aumente sua produtividade com Spring Boot

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

Page 9: Aumente sua produtividade com Spring Boot

2004 Spring 1.0

Page 10: Aumente sua produtividade com Spring Boot

Enquanto isso...

2008 - empresa Interface 21 renomeada SpringSource 2009 – Oracle compra Sun Microsystems por US$13 bi2009 – VMWare compra SpringSource por US$420 mi2013 - VMware + EMC cria a Pivotal, focada em sistemas (Spring vai junto)

Page 11: Aumente sua produtividade com Spring Boot

Linha do tempo Java EE e Spring

Page 12: Aumente sua produtividade com Spring Boot

2015

Page 13: Aumente sua produtividade com Spring Boot

2016

Page 14: Aumente sua produtividade com Spring Boot

Spring projects em 2003

Page 15: Aumente sua produtividade com Spring Boot

Spring projects em 2016 (resumido)

Page 16: Aumente sua produtividade com Spring Boot
Page 17: Aumente sua produtividade com Spring Boot

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

Page 18: Aumente sua produtividade com Spring Boot

O crescimento dos Micro Services

servidor pesado rodando uma aplicaçãocom 10 serviços é trocado por 10 servidores leves rodando apenas um serviço

Motivo 2 para criação do Spring Boot

Page 19: Aumente sua produtividade com Spring Boot

Vamos ao que interessa… como usar???

Page 20: Aumente sua produtividade com Spring Boot

Baixe e instale o Spring Tools Suite

https://spring.io/tools

Page 21: Aumente sua produtividade com Spring Boot

Criando um projeto exemplo

Page 22: Aumente sua produtividade com Spring Boot

Criando um projeto exemplo

Page 23: Aumente sua produtividade com Spring Boot

Criando um projeto exemplo online

Page 24: Aumente sua produtividade com Spring Boot

Rodando o projeto exemplo

Page 25: Aumente sua produtividade com Spring Boot

Rodando o projeto exemplo

Page 26: Aumente sua produtividade com Spring Boot

Acessando a raiz

Page 27: Aumente sua produtividade com Spring Boot

Criando uma tela inicial

package com.example;

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

@RestControllerpublic class TesteController {

@RequestMapping("/")String home() {

return "Olá Javeiros!";}

}

Page 28: Aumente sua produtividade com Spring Boot

Acessando a raiz

Page 29: Aumente sua produtividade com Spring Boot

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>

Page 30: Aumente sua produtividade com Spring Boot

Arquivo 2 de 2 gerado – Java

package com.example;

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicationpublic class DemoApplication {

public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);

} }

Page 31: Aumente sua produtividade com Spring Boot

Muitas coisas aconteram

- Servidor leve no ar- Dependências carregadas automaticamente- Dependências configuradas automaticamente- Convenção sobre configuração

Page 32: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDBpackage com.example;

import java.time.LocalDate;import java.util.List;

import org.springframework.data.annotation.Id;

public class Meetup {

@Idprivate 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;

}

@Overridepublic String toString() {

return "Meetup [titulo=" + titulo + ", data=" + data + ", participantes=" + participantes + "]";

} // getters e setters

Page 33: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDBpackage 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();

}

Page 34: Aumente sua produtividade com Spring Boot

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>

Page 35: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDB@SpringBootApplicationpublic class SampleMongoApplication implements CommandLineRunner {

@Autowiredprivate MeetupRepository repository;

@Overridepublic 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";

// gravandoSystem.out.println("Gravando:");System.out.println("-------------------------------");this.repository.save(

new Meetup(titulo, diaDoMeetup, participantes ));

Page 36: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDB

// buscandoSystem.out.println("Busca todos:");System.out.println("-------------------------------");for (Meetup meetup : this.repository.findAll()) {

System.out.println(meetup);}System.out.println();

// buscando por tituloSystem.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);

}

}

Page 37: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDB

Page 38: Aumente sua produtividade com Spring Boot

Adicionar suporte ao Spring Data–MongoDB

Page 39: Aumente sua produtividade com Spring Boot

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

}

Page 40: Aumente sua produtividade com Spring Boot

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>

Page 41: Aumente sua produtividade com Spring Boot

Adicionar suporte ReSTpackage 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 {

@Autowiredprivate 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);}

}

Page 42: Aumente sua produtividade com Spring Boot

Testando os serviços criados

Page 43: Aumente sua produtividade com Spring Boot

Testando os serviços criados

Page 44: Aumente sua produtividade com Spring Boot

Testando os serviços ReST@RunWith(SpringRunner.class)@SpringBootTest@AutoConfigureMockMvcpublic 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")); } }

Page 45: Aumente sua produtividade com Spring Boot

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>

Page 46: Aumente sua produtividade com Spring Boot

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

Page 47: Aumente sua produtividade com Spring Boot

Executando seu microserviço

$ java -jar <arquivo-gerado>.jar

Page 48: Aumente sua produtividade com Spring Boot

Gerar um WAR do seu serviço

<groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

Page 49: Aumente sua produtividade com Spring Boot

E tem mais...

- Integração com Spring Cloud- Eureka- Hystrix

Page 50: Aumente sua produtividade com Spring Boot

Leitura recomendada de Spring...

Page 51: Aumente sua produtividade com Spring Boot

Em breve mais um livro...