Vous êtes sur la page 1sur 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)
 L’annotation @SpringBootApplication déclenche la configuration
automatique de l’infrastructure Spring
@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {


SpringApplication.run(DemoApplication.class, args);
}
}

 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
 Configurationapplication.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
Exemple de test unitaire
Alias pour SpringJUnit4ClassRunner

Initialisation d’un contexte applicatif


@RunWith(SpringRunner.class)
@WebMvcTest(OwnerController.class)
web scannant les beans Spring MVC et
public class OwnerControllerTests { configuration du MockMvc

@Autowired
private MockMvc mockMvc; Simulacre Mockito enregistré dans le
contexte applicatif Spring et mis à
@MockBean disposition par auto-wiring
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"));
}
}
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)

Vous aimerez peut-être aussi