Introduction à spring boot

8,351 views

Published on

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.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,351
On SlideShare
0
From Embeds
0
Number of Embeds
6,525
Actions
Shares
0
Downloads
112
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • 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
  • 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
  • Encore plus simple en Groovy
    Support de Graddle et de Ant
  • Autres moteurs de templates : Velocity, JSP (pas en JAR exécutable)
  • 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
  • java -jar myapp,jar --spring.profiles.active=production
  • https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot-1-4
  • 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
  • 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
     
     
     
  • Article complet sur http://javaetmoi.com/2016/08/migrer-vers-spring-boot/
  • 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)
  • 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)

    ×