Introduction à
Spring Boot
4 octobre 2016
Objectifs
 Donner envie d’utiliser Spring Boot
 Démystifier le fonctionnement de l’auto-configuration
 Montrer Spring B...
Sommaire
 Les principes de Spring Boot
 Le traditionnel Hello World
 Configuration applicative
 Des tests simplifié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é
...
Hello World
 Application REST = 1 classe Java +1 pom.xml
@SpringBootApplication
@RestController
public class HelloWorld {...
Technologies supportées
 Core : Spring Security, JTA, Spring Cache, Spring Session
 Web : Spring MVC, Websocket, Jersey,...
Auto-configuration (1/2)
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
Sp...
Auto-configuration (2/2)
 Repose sur des activations conditionnelles
 @Conditional, @ConditionalOnProperty, @Conditional...
Auto-configuration de Spring JDBC
@Configuration
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@Conditiona...
Auto-configuration de la DataSource
 Complexité de DataSourceAutoConfiguration
 Récupération de la DataSource par JNDI
...
Configuration applicative
 Centralisée dans
 application.properties
 ou application.yml
 Complétion dans l’IDE
 Confi...
Des tests auto-configurés
 Le starter spring-boot-starter-test tire les frameworks de test :
JUnit, Spring Test, AssertJ,...
@RunWith(SpringRunner.class)
@WebMvcTest(OwnerController.class)
public class OwnerControllerTests {
@Autowired
private Moc...
Live coding
 Utilisation de Spring Initializr depuis IntelliJ : WEB, JPA, thymeleaf
 Utilisation de la base de données H...
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
 Initialisatio...
Conclusion
 Permet de mettre en place rapidement une application
Java basée sur Spring
 Diminue drastiquement la configu...
Ressources
 Manuel de référence de Spring Boot (Pivotal)
 Spring Boot 1.3 pour le web (S. Nicoll et B. Clozel)
 Bootifu...
Prochain SlideShare
Chargement dans…5
×

Introduction à spring boot

8 980 vues

Publié le

Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.

Publié dans : Technologie
  • Soyez le premier à commenter

Introduction à spring boot

  1. 1. Introduction à Spring Boot 4 octobre 2016
  2. 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. 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
  4. 4. L’explosion Spring Boot
  5. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. Etudes de cas : migration Spring Petclinic
  17. 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. 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. 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)

×