SlideShare una empresa de Scribd logo
1 de 19
Introduction à
Spring Boot
4 octobre 2016
Objectifs
 Donner envie d’utiliser Spring Boot
 Démystifier le fonctionnement de l’auto-configuration
 Montrer Spring Boot en action
 Partager un retour d’expérience de migration vers Spring Boot
Sommaire
 Les principes de Spring Boot
 Le traditionnel Hello World
 Configuration applicative
 Des tests simplifiés
 Démo : développement d’une application Hello World
 Etudes de cas : migration de l’application Spring Petclinic
 Aperçu des autres fonctionnalités
L’explosion Spring Boot
Les idées fortes
 Accélérer le développement d’applications Spring
 Convention over Configuration
 Pas de code généré
 Déploiement facilité
 Prêt pour la production
Hello World
 Application REST = 1 classe Java +1 pom.xml
@SpringBootApplication
@RestController
public class HelloWorld {
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class, args);
}
@RequestMapping("/")
public String hello() {
return "Hello World!";
}
}
Technologies supportées
 Core : Spring Security, JTA, Spring Cache, Spring Session
 Web : Spring MVC, Websocket, Jersey, Mobile, HATEOS
 Moteurs de templates : Freemaker, Thymeleaf, Groovy, Mustache
 Database
 SGBDR : Spring Data JPA, JDBC, JOOQ
 NoSQL : Redis, MongoDB, Elasticsearch, Cassandra
 La suite Spring Cloud : Eureka, Hystrix, Turbine, AWS, OAuth2
 I/O : Spring Batch et Integration, JavaMail, Camel, JMS, AMQP
 Social : Facebook, Linkedin, Twitter
Auto-configuration (1/2)
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
 L’annotation @SpringBootApplication déclenche la configuration
automatique de l’infrastructure Spring
 Au démarrage de l’application, Spring Boot :
 Scanne toutes classes de @Configuration
 Classes de configuration spécifiques à l’application
 Classes de Spring Boot suffixées par AutoConfiguration (110 dans Spring Boot 1.4.1)
 3rd party starters
 Utilise les JAR présents dans le classpath pour prendre des décisions
Auto-configuration (2/2)
 Repose sur des activations conditionnelles
 @Conditional, @ConditionalOnProperty, @ConditionalOnClass,
@ConditionalOnMissingClass ,@ConditionalOnMissingBean ,
@ConditionalOnWebApplication, @ConditionalOnNotWebApplication,
@ConditionalOnExpression
 Possibilité de créer sa propre librairie auto-configurable
Auto-configuration de Spring JDBC
@Configuration
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class JdbcTemplateAutoConfiguration {
private final DataSource dataSource;
public JdbcTemplateAutoConfiguration(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
@Primary
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}
@Bean
@Primary
@ConditionalOnMissingBean(NamedParameterJdbcOperations.class)
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
return new NamedParameterJdbcTemplate(this.dataSource);
}
}
Auto-configuration de la DataSource
 Complexité de DataSourceAutoConfiguration
 Récupération de la DataSource par JNDI
 Choix du pool de connexions : Tomcat, HikariCP, Commons DBCP 1 ou 2
 Paramétrage de la connexion à la base de données
 Configuration application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 Base de données embarquée par analyse des JAR dans le classpath
 Support du XA
 Exposition du pool via JMX
Configuration applicative
 Centralisée dans
 application.properties
 ou application.yml
 Complétion dans l’IDE
 Configuration extensible et TypeSafe
 @ConfigurationProperties
 Possibilité de configuration spécifique à un environnement de déploiement
 java -jar myapp,jar --spring.profiles.active=production
 Charge application-production.properties
Des tests auto-configurés
 Le starter spring-boot-starter-test tire les frameworks de test :
JUnit, Spring Test, AssertJ, Mockito, JsonPath, JSONassert et Hamcrest.
 Fonctionnalité de « test slicing »
 Permet de segmenter les tests : couche présentation, contrôleurs REST, DAO …
 Spring Boot se charge de créer un contexte applicatif dédié
 Jeu d’annotations : @WebMvcTest, @JsonTest, @DataJpaTest, @RestClientTest
 Possibilité de créer son propre slice (ex: @DataJdbcTest)
 Création automatique de simulacres avec @MockBean
 Pour les tests d’intégration, @SpringBootTest permet de démarrer un
conteneur de servlet
@RunWith(SpringRunner.class)
@WebMvcTest(OwnerController.class)
public class OwnerControllerTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private ClinicService clinicService;
@Test
public void testDisplayOwner() throws Exception {
Owner george = new Owner(1, "George", "Franklin");
given(this.clinicService.findOwnerById(1)).willReturn(george);
mockMvc.perform(get("/owners/{ownerId}", 1))
.andExpect(status().isOk())
.andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin"))))
.andExpect(model().attribute("owner", hasProperty("firstName", is("George"))))
.andExpect(view().name("owners/ownerDetails"));
}
}
Exemple de test unitaire
Initialisation d’un contexte applicatif
web scannant les beans Spring MVC et
configuration du MockMvc
Simulacre Mockito enregistré dans le
contexte applicatif Spring et mis à
disposition par auto-wiring
Alias pour SpringJUnit4ClassRunner
Live coding
 Utilisation de Spring Initializr depuis IntelliJ : WEB, JPA, thymeleaf
 Utilisation de la base de données H2
 Création d’un service REST HelloWorld
 Configuration du logger
 Migration Tomcat vers Jetty
 Démo des actuators
 Personnalisation de la bannière
 Exécution d’un JAR auto-exécutable
 Changement de port par configuration, paramètre et profile Spring
Etudes de cas : migration Spring Petclinic
Et plein d’autres fonctionnalités
 Personnalisation de la bannière de démarrage
 Prêt pour la Production
 Initialisation de bases de données
 Exécution de jobs Spring Batch
 Shell remote (CRaSH)
 Spring Boot CLI
 Utiliser Jetty ou Undertow à la place de Tomcat
 Live Reload & Hot swapping
 Installation sous forme de service Linux ou Windows
Conclusion
 Permet de mettre en place rapidement une application
Java basée sur Spring
 Diminue drastiquement la configuration Spring
 Peut remplacer un socle d’Entreprise
 Dites adieu aux bons vieux gros serveurs d’applications
 Make JAR not WAR
Ressources
 Manuel de référence de Spring Boot (Pivotal)
 Spring Boot 1.3 pour le web (S. Nicoll et B. Clozel)
 Bootiful Microservice (Josh Long)
 Migrer vers Spring Boot (Antoine Rey)
 Custom test slice with Spring Boot 1.4 (S. Nicoll)
 Spring Guides (Pivotal)

Más contenido relacionado

La actualidad más candente

Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EEInes Ouaz
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)Heithem Abbes
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 

La actualidad más candente (20)

Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 

Similar a Introduction à spring boot

ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursHoracio Gonzalez
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Fabien Baligand
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer FacesJS Bournival
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Mejdeddine Bouzouita
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 

Similar a Introduction à spring boot (20)

Springioc
SpringiocSpringioc
Springioc
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
2
22
2
 
Jdbc
JdbcJdbc
Jdbc
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Introduction à JPA (Java Persistence API )
Introduction à JPA  (Java Persistence API )Introduction à JPA  (Java Persistence API )
Introduction à JPA (Java Persistence API )
 

Más de Antoine Rey

Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 

Más de Antoine Rey (8)

Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 

Introduction à spring boot

  • 2. Objectifs  Donner envie d’utiliser Spring Boot  Démystifier le fonctionnement de l’auto-configuration  Montrer Spring Boot en action  Partager un retour d’expérience de migration vers Spring Boot
  • 3. Sommaire  Les principes de Spring Boot  Le traditionnel Hello World  Configuration applicative  Des tests simplifiés  Démo : développement d’une application Hello World  Etudes de cas : migration de l’application Spring Petclinic  Aperçu des autres fonctionnalités
  • 5. Les idées fortes  Accélérer le développement d’applications Spring  Convention over Configuration  Pas de code généré  Déploiement facilité  Prêt pour la production
  • 6. Hello World  Application REST = 1 classe Java +1 pom.xml @SpringBootApplication @RestController public class HelloWorld { public static void main(String[] args) { SpringApplication.run(HelloWorld.class, args); } @RequestMapping("/") public String hello() { return "Hello World!"; } }
  • 7. Technologies supportées  Core : Spring Security, JTA, Spring Cache, Spring Session  Web : Spring MVC, Websocket, Jersey, Mobile, HATEOS  Moteurs de templates : Freemaker, Thymeleaf, Groovy, Mustache  Database  SGBDR : Spring Data JPA, JDBC, JOOQ  NoSQL : Redis, MongoDB, Elasticsearch, Cassandra  La suite Spring Cloud : Eureka, Hystrix, Turbine, AWS, OAuth2  I/O : Spring Batch et Integration, JavaMail, Camel, JMS, AMQP  Social : Facebook, Linkedin, Twitter
  • 8. Auto-configuration (1/2) @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }  L’annotation @SpringBootApplication déclenche la configuration automatique de l’infrastructure Spring  Au démarrage de l’application, Spring Boot :  Scanne toutes classes de @Configuration  Classes de configuration spécifiques à l’application  Classes de Spring Boot suffixées par AutoConfiguration (110 dans Spring Boot 1.4.1)  3rd party starters  Utilise les JAR présents dans le classpath pour prendre des décisions
  • 9. Auto-configuration (2/2)  Repose sur des activations conditionnelles  @Conditional, @ConditionalOnProperty, @ConditionalOnClass, @ConditionalOnMissingClass ,@ConditionalOnMissingBean , @ConditionalOnWebApplication, @ConditionalOnNotWebApplication, @ConditionalOnExpression  Possibilité de créer sa propre librairie auto-configurable
  • 10. Auto-configuration de Spring JDBC @Configuration @ConditionalOnClass({ DataSource.class, JdbcTemplate.class }) @ConditionalOnSingleCandidate(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class JdbcTemplateAutoConfiguration { private final DataSource dataSource; public JdbcTemplateAutoConfiguration(DataSource dataSource) { this.dataSource = dataSource; } @Bean @Primary @ConditionalOnMissingBean(JdbcOperations.class) public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(this.dataSource); } @Bean @Primary @ConditionalOnMissingBean(NamedParameterJdbcOperations.class) public NamedParameterJdbcTemplate namedParameterJdbcTemplate() { return new NamedParameterJdbcTemplate(this.dataSource); } }
  • 11. Auto-configuration de la DataSource  Complexité de DataSourceAutoConfiguration  Récupération de la DataSource par JNDI  Choix du pool de connexions : Tomcat, HikariCP, Commons DBCP 1 ou 2  Paramétrage de la connexion à la base de données  Configuration application.properties spring.datasource.driver-class-name=com.mysql.jdbc.Driver  Base de données embarquée par analyse des JAR dans le classpath  Support du XA  Exposition du pool via JMX
  • 12. Configuration applicative  Centralisée dans  application.properties  ou application.yml  Complétion dans l’IDE  Configuration extensible et TypeSafe  @ConfigurationProperties  Possibilité de configuration spécifique à un environnement de déploiement  java -jar myapp,jar --spring.profiles.active=production  Charge application-production.properties
  • 13. Des tests auto-configurés  Le starter spring-boot-starter-test tire les frameworks de test : JUnit, Spring Test, AssertJ, Mockito, JsonPath, JSONassert et Hamcrest.  Fonctionnalité de « test slicing »  Permet de segmenter les tests : couche présentation, contrôleurs REST, DAO …  Spring Boot se charge de créer un contexte applicatif dédié  Jeu d’annotations : @WebMvcTest, @JsonTest, @DataJpaTest, @RestClientTest  Possibilité de créer son propre slice (ex: @DataJdbcTest)  Création automatique de simulacres avec @MockBean  Pour les tests d’intégration, @SpringBootTest permet de démarrer un conteneur de servlet
  • 14. @RunWith(SpringRunner.class) @WebMvcTest(OwnerController.class) public class OwnerControllerTests { @Autowired private MockMvc mockMvc; @MockBean private ClinicService clinicService; @Test public void testDisplayOwner() throws Exception { Owner george = new Owner(1, "George", "Franklin"); given(this.clinicService.findOwnerById(1)).willReturn(george); mockMvc.perform(get("/owners/{ownerId}", 1)) .andExpect(status().isOk()) .andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin")))) .andExpect(model().attribute("owner", hasProperty("firstName", is("George")))) .andExpect(view().name("owners/ownerDetails")); } } Exemple de test unitaire Initialisation d’un contexte applicatif web scannant les beans Spring MVC et configuration du MockMvc Simulacre Mockito enregistré dans le contexte applicatif Spring et mis à disposition par auto-wiring Alias pour SpringJUnit4ClassRunner
  • 15. Live coding  Utilisation de Spring Initializr depuis IntelliJ : WEB, JPA, thymeleaf  Utilisation de la base de données H2  Création d’un service REST HelloWorld  Configuration du logger  Migration Tomcat vers Jetty  Démo des actuators  Personnalisation de la bannière  Exécution d’un JAR auto-exécutable  Changement de port par configuration, paramètre et profile Spring
  • 16. Etudes de cas : migration Spring Petclinic
  • 17. Et plein d’autres fonctionnalités  Personnalisation de la bannière de démarrage  Prêt pour la Production  Initialisation de bases de données  Exécution de jobs Spring Batch  Shell remote (CRaSH)  Spring Boot CLI  Utiliser Jetty ou Undertow à la place de Tomcat  Live Reload & Hot swapping  Installation sous forme de service Linux ou Windows
  • 18. Conclusion  Permet de mettre en place rapidement une application Java basée sur Spring  Diminue drastiquement la configuration Spring  Peut remplacer un socle d’Entreprise  Dites adieu aux bons vieux gros serveurs d’applications  Make JAR not WAR
  • 19. Ressources  Manuel de référence de Spring Boot (Pivotal)  Spring Boot 1.3 pour le web (S. Nicoll et B. Clozel)  Bootiful Microservice (Josh Long)  Migrer vers Spring Boot (Antoine Rey)  Custom test slice with Spring Boot 1.4 (S. Nicoll)  Spring Guides (Pivotal)

Notas del editor

  1. Source : https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016-trends/ Sprint Boot 1.0 est sorti en 2013 http://www.indeed.com/jobtrends/q-spring-and-boot.html
  2. Convention over Configuration : Opinionated view of the Spring platform and third-party libraries. Plus ou peu de configuration Spring. Pas de code généré : pas de code Java ni de configuration XML ou Java Déploiement facilité : pas de serveur à installer, exécution d’un JAR auto-exécutable avec un java –jar myappli.jar, serveur Jetty/Undertow/Tomcat embarqué Prêt pour la production : configuration externalisée, profils de conf, surcharge de conf, monitoring (actuator), services Windows et Linux, support du CORS, remote shell Mais également : Spring Boot gère pour vous la version des frameworks compatibles les uns avec les autres
  3. Encore plus simple en Groovy Support de Graddle et de Ant
  4. Autres moteurs de templates : Velocity, JSP (pas en JAR exécutable)
  5. DataSourceAutoConfiguration : https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java EmbeddedDatabaseConnection : https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/EmbeddedDatabaseConnection.java
  6. java -jar myapp,jar --spring.profiles.active=production
  7. https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot-1-4
  8. Exemple créé à partir de la classe https://github.com/spring-projects/spring-petclinic/blob/springboot/src/test/java/org/springframework/samples/petclinic/web/OwnerControllerTests.java @WebMvcTest recherche les beans @Controller, @ControllerAdvice, @JsonComponent, Filter, WebMvcConfigurer et HandlerMethodArgumentResolver
  9. 1. GÈnÈrer un projet avec Spring Initializr depuis IntelliJ Choisir web, JPA, thymeleaf   2. Ajout la dÈpendance vers h2 dans le pom.xml <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> 3. CrÈation de la classe Hello public class Hello {   private final long id; private final String name;   public Hello(long id, String name) { this.id = id; this.name = name; }   public long getId() { return id; }   public String getName() { return name; } }   4. Ajout du contrÙleur @RestController public class HelloController {   private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong();   @RequestMapping("/hello/{name}") public Hello sayHello(@PathVariable String name) { return new Hello(counter.incrementAndGet(), String.format(template, name));   } } 5. Configuration du application.properties logging.level.org.springframework.web=INFO     6. Utilisation de Jetty ‡ la place de Tomcat Modification du pom.xml : <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>   7. Utilisation des actuators Ajout dans le pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 8. Ajout d'informations   ComplÈeter application.properties : info.exemple=Test Puis http://localhost:8082/info   Ajout via maven : <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <!-- Spring Boot Actuator displays build-related information if a META-INF/build-info.properties file is present --> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>${project.build.sourceEncoding}</encoding.source> <encoding.reporting>${project.reporting.outputEncoding}</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin>       9. Personnalisation de la banniËre avec Duke   10. DÈmarrage du JAR java -jar target/demo-0.0.1-SNAPSHOT.jar   11. Changement de port par configuration, paramËtre et profile Spring --server.port=9090 application-prod.properties et --spring.profiles.active=prod      
  10. Article complet sur http://javaetmoi.com/2016/08/migrer-vers-spring-boot/
  11. Prêt pour la Production : health-check, monitoring, pistes d’audit, métriques => actuator Initialisation de base de données : Flyway et Liquibase. CRaSH permet de connecter à l’application en ssh ou telnet Spring Boot CLI : outils en ligne de commande permetta,t d’exéciton des scripts Groovy. Exemple : spring run app.groovy Service Linux : support de Systemd et init.d (System V)