backday xebia : découvrez spring boot sur un cas pratique

47
#backdaybyxebia Nicolas Jozwiak Thomas Auffredou Construire le SI de demain Spring boot

Upload: xebia-france

Post on 27-Jul-2015

132 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Nicolas Jozwiak Thomas Auffredou

Construire le SI de demain

Spring boot

Page 2: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@tauffredou

@njozwiak

Page 3: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Initié par Phillip Webb : @phillip_web

et Dave Syer : @david_syer

Page 4: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Dernière release GA : 1.2.3 (Mars 2015)

Page 5: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Se frayer un chemin dans la galaxie Spring

Objectifs

Page 6: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

●  Démarrer rapidement ●  Convention over configuration ●  Orienté ops (métriques, configuration, ...) ●  Pas de génération de code (contrairement à SpringRoo)

Objectifs

Page 7: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Exemple Groovy @RestController class SampleApplication { @RequestMapping("/") String home() { "Hello World!" } } $spring run app.groovy

Page 8: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Présentation

●  Prérequis faibles : jdk >= 1.6, maven >= 3.1, gradle >= 1.6 ●  Repose sur les nouveautés de Spring 4 ●  Orientation architecture standalone / microservices

Page 9: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@EnableAutoConfiguration

●  Configuration automatique de l'application ●  Repose principalement sur les @Conditional

Page 10: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@ConditionalOnClass

@Configuration @ConditionalOnClass(Mongo.class) @EnableConfigurationProperties(MongoProperties.class) public class MongoAutoConfiguration { /* ... */ }

Page 11: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@ConditionalOnBean

@Configuration @ConditionalOnExpression("${health.db.enabled:true}") @ConditionalOnBean(DataSource.class) public static class DataSourcesHealthIndicatorConfiguration { /* ... */ }

Page 12: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@ConditionalOnMissingBean

@Bean @ConditionalOnMissingBean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter( ObjectMapper objectMapper) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(objectMapper); converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); return converter; }

Page 13: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@ConditionalOnExpression

@ConditionalOnExpression("${security.basic.enabled:true}") @Configuration @Order(SecurityProperties.BASIC_AUTH_ORDER) protected static class ApplicationWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { /*...*/ }

Page 14: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

@ConditionalOnProperty

@Bean @ConditionalOnProperty(prefix = "spring.mvc.", value = "date-format") public Formatter<Date> dateFormatter() { return new DateFormatter(this.mvcProperties.getDateFormat()); }

Page 15: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

●  @ConditionalOnMissingClass ●  @ConditionalOnNotWebApplication ●  @ConditionalOnResource ●  @ConditionalOnWebApplication

Page 16: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Application.java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; @Configuration @EnableAutoConfiguration @Import(RepositoryRestMvcConfiguration.class) @EnableJpaRepositories public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

Page 17: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Client.java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Client { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; String name; //Getter & Setter }

Page 18: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

ClientRepository.java

import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(collectionResourceRel = "client",path = "client") public interface ClientRepository extends PagingAndSortingRepository<Client,Long> { }

Page 19: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Sous le capot...

●  spring mvc ●  jpa + hibernate ●  logback ●  tomcat ●  spring HATEOAS

Page 20: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

STARTERS

Page 21: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-parent

●  Gère la version des starters et des dépendances sous-jacentes ●  On ne définit que la version de spring boot (ex : 1.2.3.RELEASE)

Page 22: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-web

Tomcat + Spring MVC + logback

Page 23: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-jpa

JPA & Hibernate + Validation + TomcatConnectionPool

Page 24: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-security

●  basic auth ●  jdbc ●  oAuth ●  cas ●  ...

Spring security

Page 25: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-actuator

●  Metrics ●  Health Check ●  Autoconfig ●  Environment information ●  Pages d'erreurs par défaut

MVC endpoints + JMX support

Page 26: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-starter-test spring-boot-starter-jetty

spring-boot-starter-mongo

...

Liste complète sur https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters

Page 27: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Gestion de configuration

Page 28: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Fichiers par défaut

●  application.properties ●  application.yml

Page 29: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Emplacements par défaut

●  classpath: ●  classpath:/config ●  file: ●  file:config/

Page 30: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Surcharger la configuration

Page 31: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

ConfigurationProperties

@Component @ConfigurationProperties(prefix = "my-app") public class SampleProperties { private String version; private String motd = "Some default value"; // Getters & setters }

Page 32: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

ConfigurationProperties @Component @ConfigurationProperties(prefix = "my-app") public class SampleProperties { private String version; private String motd = "Some default value"; // Getters & setters }

SampleProperties.java

application.yml

my-app : version : 1.2.3 motd : "Un message tellement plus utile"

Page 33: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

ConfigurationProperties

@Service public class SampleService { @Inject ClientProperties properties; }

SampleService.java

Page 34: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Avec les profiles spring

$java -jar my-app.jar --spring.profiles.active=instance1

SampleProperties.java

application-instance1.yml

# # Override properties from application.yml for instance1 # server : port : 8081

Page 35: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

En précisant les fichiers

$java -jar my-app.jar --spring.config.location=\ file:/etc/my-app/default.properties,\ file:/etc/my-app/instance1.properties

Page 36: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Spring Cloud

Page 37: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Gestion de systèmes distribués

●  Gestion de la configuration versionnée ●  Découverte et enregistrement de services ●  Messages distribués ●  Locks distribués ●  Election de leader dans un cluster ●  ...

Liste complète sur http://projects.spring.io/spring-cloud

Page 38: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

spring-boot-netflix ●  service discovery ●  circuit breaker ●  load balancer côté client ●  monitoring ●  router et filter ●  ...

Liste complète sur http://projects.spring.io/spring-cloud

Page 39: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Démo Gestion des actions

Page 40: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Page 41: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Page 42: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

●  Tolérance à la panne ●  Monitoring en temps réel ●  Gestion de la concurrence

Page 43: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Eureka Découverte de services

Page 44: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Let’s play

Page 45: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

Critiques

Page 46: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

●  Beaucoup de magies ●  Obligation de surcharger ●  Pratiquement plus de XML ●  Même courbe d’apprentissage que Spring

Page 47: Backday Xebia : Découvrez Spring Boot sur un cas pratique

#backdaybyxebia

https://github.com/xebia-france/backday-spring-boot-server