#backdaybyxebia
Nicolas Jozwiak
Thomas Auffredou
Construire le SI de demain
Spring boot
#backdaybyxebia
@tauffredou
@njozwiak
#backdaybyxebia
Initié par
Phillip Webb : @phillip_web
et
Dave Syer : @david_syer
#backdaybyxebia
Dernière release GA : 1.2.3
(Mars 2015)
#backdaybyxebia
Se frayer un chemin dans la galaxie Spring
Objectifs
#backdaybyxebia
●  Démarrer rapidement
●  Convention over configuration
●  Orienté ops (métriques, configuration, ...)
●  Pa...
#backdaybyxebia
Exemple Groovy
@RestController
class SampleApplication
{
@RequestMapping("/")
String home() {
"Hello World...
#backdaybyxebia
Présentation
●  Prérequis faibles : jdk >= 1.6, maven >= 3.1, gradle >= 1.6
●  Repose sur les nouveautés d...
#backdaybyxebia
@EnableAutoConfiguration
●  Configuration automatique de l'application
●  Repose principalement sur les @Con...
#backdaybyxebia
@ConditionalOnClass
@Configuration
@ConditionalOnClass(Mongo.class)
@EnableConfigurationProperties(MongoPr...
#backdaybyxebia
@ConditionalOnBean
@Configuration
@ConditionalOnExpression("${health.db.enabled:true}")
@ConditionalOnBean...
#backdaybyxebia
@ConditionalOnMissingBean
@Bean
@ConditionalOnMissingBean
public MappingJackson2HttpMessageConverter mappi...
#backdaybyxebia
@ConditionalOnExpression
@ConditionalOnExpression("${security.basic.enabled:true}")
@Configuration
@Order(...
#backdaybyxebia
@ConditionalOnProperty
@Bean
@ConditionalOnProperty(prefix = "spring.mvc.", value = "date-format")
public ...
#backdaybyxebia
●  @ConditionalOnMissingClass
●  @ConditionalOnNotWebApplication
●  @ConditionalOnResource
●  @Conditional...
#backdaybyxebia
Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoco...
#backdaybyxebia
Client.java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persist...
#backdaybyxebia
ClientRepository.java
import org.springframework.data.repository.PagingAndSortingRepository;
import org.sp...
#backdaybyxebia
Sous le capot...
●  spring mvc
●  jpa + hibernate
●  logback
●  tomcat
●  spring HATEOAS
#backdaybyxebia
STARTERS
#backdaybyxebia
spring-boot-starter-parent
●  Gère la version des starters et des dépendances sous-jacentes
●  On ne défini...
#backdaybyxebia
spring-boot-starter-web
Tomcat + Spring MVC + logback
#backdaybyxebia
spring-boot-starter-jpa
JPA & Hibernate + Validation + TomcatConnectionPool
#backdaybyxebia
spring-boot-starter-security
●  basic auth
●  jdbc
●  oAuth
●  cas
●  ...
Spring security
#backdaybyxebia
spring-boot-starter-actuator
●  Metrics
●  Health Check
●  Autoconfig
●  Environment information
●  Pages d...
#backdaybyxebia
spring-boot-starter-test
spring-boot-starter-jetty
spring-boot-starter-mongo
...
Liste complète sur https:...
#backdaybyxebia
Gestion de configuration
#backdaybyxebia
Fichiers par défaut
●  application.properties
●  application.yml
#backdaybyxebia
Emplacements par défaut
●  classpath:
●  classpath:/config
●  file:
●  file:config/
#backdaybyxebia
Surcharger la configuration
#backdaybyxebia
ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "my-app")
public class SamplePropertie...
#backdaybyxebia
ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "my-app")
public class SamplePropertie...
#backdaybyxebia
ConfigurationProperties
@Service
public class SampleService {
@Inject
ClientProperties properties;
}
Sample...
#backdaybyxebia
Avec les profiles spring
$java -jar my-app.jar --spring.profiles.active=instance1
SampleProperties.java
app...
#backdaybyxebia
En précisant les fichiers
$java -jar my-app.jar --spring.config.location=
file:/etc/my-app/default.properti...
#backdaybyxebia
Spring Cloud
#backdaybyxebia
Gestion de systèmes
distribués
●  Gestion de la configuration versionnée
●  Découverte et enregistrement de...
#backdaybyxebia
spring-boot-netflix
●  service discovery
●  circuit breaker
●  load balancer côté client
●  monitoring
●  ...
#backdaybyxebia
Démo
Gestion des actions
#backdaybyxebia
#backdaybyxebia
#backdaybyxebia
●  Tolérance à la panne
●  Monitoring en temps réel
●  Gestion de la concurrence
#backdaybyxebia
Eureka
Découverte de services
#backdaybyxebia
Let’s play
#backdaybyxebia
Critiques
#backdaybyxebia
●  Beaucoup de magies
●  Obligation de surcharger
●  Pratiquement plus de XML
●  Même courbe d’apprentissa...
#backdaybyxebia
https://github.com/xebia-france/backday-
spring-boot-server
Prochain SlideShare
Chargement dans…5
×

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

1 341 vues

Publié le

Spring Boot propose un large panel d'outils pour démarrer et développer rapidement des applications.

Après une rapide introduction à l'outil, nous présenterons le code d'une application développé en mode microservices. Ce sera aussi l'occasion d'évoquer les principes de circuit breaker et de monitoring ainsi que de savoir comment Spring Boot permet de les réaliser.

Par Nicolas Jozwiak et Thomas Auffredou

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 341
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
45
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. #backdaybyxebia Nicolas Jozwiak Thomas Auffredou Construire le SI de demain Spring boot
  2. 2. #backdaybyxebia @tauffredou @njozwiak
  3. 3. #backdaybyxebia Initié par Phillip Webb : @phillip_web et Dave Syer : @david_syer
  4. 4. #backdaybyxebia Dernière release GA : 1.2.3 (Mars 2015)
  5. 5. #backdaybyxebia Se frayer un chemin dans la galaxie Spring Objectifs
  6. 6. #backdaybyxebia ●  Démarrer rapidement ●  Convention over configuration ●  Orienté ops (métriques, configuration, ...) ●  Pas de génération de code (contrairement à SpringRoo) Objectifs
  7. 7. #backdaybyxebia Exemple Groovy @RestController class SampleApplication { @RequestMapping("/") String home() { "Hello World!" } } $spring run app.groovy
  8. 8. #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
  9. 9. #backdaybyxebia @EnableAutoConfiguration ●  Configuration automatique de l'application ●  Repose principalement sur les @Conditional
  10. 10. #backdaybyxebia @ConditionalOnClass @Configuration @ConditionalOnClass(Mongo.class) @EnableConfigurationProperties(MongoProperties.class) public class MongoAutoConfiguration { /* ... */ }
  11. 11. #backdaybyxebia @ConditionalOnBean @Configuration @ConditionalOnExpression("${health.db.enabled:true}") @ConditionalOnBean(DataSource.class) public static class DataSourcesHealthIndicatorConfiguration { /* ... */ }
  12. 12. #backdaybyxebia @ConditionalOnMissingBean @Bean @ConditionalOnMissingBean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter( ObjectMapper objectMapper) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(objectMapper); converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); return converter; }
  13. 13. #backdaybyxebia @ConditionalOnExpression @ConditionalOnExpression("${security.basic.enabled:true}") @Configuration @Order(SecurityProperties.BASIC_AUTH_ORDER) protected static class ApplicationWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { /*...*/ }
  14. 14. #backdaybyxebia @ConditionalOnProperty @Bean @ConditionalOnProperty(prefix = "spring.mvc.", value = "date-format") public Formatter<Date> dateFormatter() { return new DateFormatter(this.mvcProperties.getDateFormat()); }
  15. 15. #backdaybyxebia ●  @ConditionalOnMissingClass ●  @ConditionalOnNotWebApplication ●  @ConditionalOnResource ●  @ConditionalOnWebApplication
  16. 16. #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); } }
  17. 17. #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 }
  18. 18. #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> { }
  19. 19. #backdaybyxebia Sous le capot... ●  spring mvc ●  jpa + hibernate ●  logback ●  tomcat ●  spring HATEOAS
  20. 20. #backdaybyxebia STARTERS
  21. 21. #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)
  22. 22. #backdaybyxebia spring-boot-starter-web Tomcat + Spring MVC + logback
  23. 23. #backdaybyxebia spring-boot-starter-jpa JPA & Hibernate + Validation + TomcatConnectionPool
  24. 24. #backdaybyxebia spring-boot-starter-security ●  basic auth ●  jdbc ●  oAuth ●  cas ●  ... Spring security
  25. 25. #backdaybyxebia spring-boot-starter-actuator ●  Metrics ●  Health Check ●  Autoconfig ●  Environment information ●  Pages d'erreurs par défaut MVC endpoints + JMX support
  26. 26. #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
  27. 27. #backdaybyxebia Gestion de configuration
  28. 28. #backdaybyxebia Fichiers par défaut ●  application.properties ●  application.yml
  29. 29. #backdaybyxebia Emplacements par défaut ●  classpath: ●  classpath:/config ●  file: ●  file:config/
  30. 30. #backdaybyxebia Surcharger la configuration
  31. 31. #backdaybyxebia ConfigurationProperties @Component @ConfigurationProperties(prefix = "my-app") public class SampleProperties { private String version; private String motd = "Some default value"; // Getters & setters }
  32. 32. #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"
  33. 33. #backdaybyxebia ConfigurationProperties @Service public class SampleService { @Inject ClientProperties properties; } SampleService.java
  34. 34. #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
  35. 35. #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
  36. 36. #backdaybyxebia Spring Cloud
  37. 37. #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
  38. 38. #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
  39. 39. #backdaybyxebia Démo Gestion des actions
  40. 40. #backdaybyxebia
  41. 41. #backdaybyxebia
  42. 42. #backdaybyxebia ●  Tolérance à la panne ●  Monitoring en temps réel ●  Gestion de la concurrence
  43. 43. #backdaybyxebia Eureka Découverte de services
  44. 44. #backdaybyxebia Let’s play
  45. 45. #backdaybyxebia Critiques
  46. 46. #backdaybyxebia ●  Beaucoup de magies ●  Obligation de surcharger ●  Pratiquement plus de XML ●  Même courbe d’apprentissage que Spring
  47. 47. #backdaybyxebia https://github.com/xebia-france/backday- spring-boot-server

×