Aumente sua produtividade com Spring Boot

251 visualizações

Publicada em

Aumente sua produtividade com Spring Boot

Publicada em: Internet
  • Seja o primeiro a comentar

Aumente sua produtividade com Spring Boot

  1. 1. Aumente sua produtividade com Spring Boot Fernando Boaglio
  2. 2. Quem é Fernando Boaglio ?
  3. 3. 8 Javeiros que você deveria conhecer !
  4. 4. 8 Javeiros que você deveria conhecer ! James Gosling Joshua Bloch Duncan Davison Marc Fleury Rod Johnson Kent Beck Craig Mcclanahan Gavin King
  5. 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. 6. 2002 J2EE = EJB 2.x
  7. 7. Só havia um pequeno problema: o tempo gasto com requisitos não funcionais muitas vezes era MAIOR que com os funcionais.
  8. 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
  9. 9. 2004 Spring 1.0
  10. 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. 11. Linha do tempo Java EE e Spring
  12. 12. 2015
  13. 13. 2016
  14. 14. Spring projects em 2003
  15. 15. Spring projects em 2016 (resumido)
  16. 16. 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
  17. 17. 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
  18. 18. Vamos ao que interessa… como usar???
  19. 19. Baixe e instale o Spring Tools Suite https://spring.io/tools
  20. 20. Criando um projeto exemplo
  21. 21. Criando um projeto exemplo
  22. 22. Criando um projeto exemplo online
  23. 23. Rodando o projeto exemplo
  24. 24. Rodando o projeto exemplo
  25. 25. Acessando a raiz
  26. 26. 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!"; } }
  27. 27. Acessando a raiz
  28. 28. 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>
  29. 29. 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); } }
  30. 30. Muitas coisas aconteram - Servidor leve no ar - Dependências carregadas automaticamente - Dependências configuradas automaticamente - Convenção sobre configuração
  31. 31. 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
  32. 32. 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(); }
  33. 33. 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>
  34. 34. 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 ));
  35. 35. 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); } }
  36. 36. Adicionar suporte ao Spring Data–MongoDB
  37. 37. Adicionar suporte ao Spring Data–MongoDB
  38. 38. 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); }
  39. 39. 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>
  40. 40. 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); } }
  41. 41. Testando os serviços criados
  42. 42. Testando os serviços criados
  43. 43. 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")); } }
  44. 44. 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>
  45. 45. 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] ------------------------------------------------------------------------
  46. 46. Executando seu microserviço $ java -jar <arquivo-gerado>.jar
  47. 47. Gerar um WAR do seu serviço <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging>
  48. 48. E tem mais... - Integração com Spring Cloud - Eureka - Hystrix
  49. 49. Leitura recomendada de Spring...
  50. 50. Em breve mais um livro...

×