SlideShare une entreprise Scribd logo
1  sur  18
Introduction to
Spring Boot
October 4, 2016
Purbarun Chakrabarti
Objectives
Make you want to use Spring Boot
Demystify how self-configuration works
Show Spring Boot in action
Share a return of migration experience to Spring Boot
Summary
The principles of Spring Boot
The traditional Hello World
Application configuration
Simplified tests
Demo: development of a Hello World application
Case studies: migration of the Spring Petclinic application
Overview of other features
Strong ideas
Accelerate the development of Spring applications
Convention over Configuration
No code generated
Easy deployment
Ready for production
Hello World
REST Application = 1 Java Class +1 pom.xml/build.gradle
@SpringBootApplication
@RestController
public class HelloWorld {
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class, args);
}
@RequestMapping("/")
public String hello() {
return "Hello World!";
}
}
Technologies supported
Core : Spring Security, JTA, Spring Cache, Spring Session
Web : Spring MVC, Websocket, Jersey, Mobile, HATEOS
Template engines : Freemaker, Thymeleaf, Groovy, Mustache
Database
RDBMS : Spring Data JPA, JDBC, JOOQ
NoSQL : Redis, MongoDB, Elasticsearch, Cassandra
Spring Cloud Suite: Eureka, Hystrix, Turbine, AWS, OAuth2
I/O : Spring Batch and Integration, JavaMail, Camel, JMS, AMQP
Social : Facebook, Linkedin, Twitter
Auto-configuration (1/2)
The @SpringBootApplication annotation triggers the automatic
configuration of the Spring infrastructure
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
When the application starts, Spring Boot :
Scans all classes of @Configuration
Application-specific configuration classes
Spring Boot Classes Suffixed by AutoConfiguration
Use the JARs present in the classpath to make decisions
Auto-configuration (2/2)
Based on conditional activations
@Conditional, @ConditionalOnProperty, @ConditionalOnClass,
@ConditionalOnMissingClass ,@ConditionalOnMissingBean ,
@ConditionalOnWebApplication, @ConditionalOnNotWebApplication,
@ConditionalOnExpression
Possibility to create your own self-configuring library
Spring JDBC auto-configuration
@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 of the DataSource
Complexity of DataSourceAutoConfiguration
DataSource recovery by JNDI
Choice of connection pool : Tomcat, HikariCP
, Commons DBCP 1 or 2
Setting up the connection to the database
Configurationapplication.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Embedded database by JAR analysis in the classpath
XA Support
Pool exposure via JMX
Application Configuration
Centralized in
 application.properties
 or application.yml
Completion in the IDE
Expandable and TypeSafe configuration
 @ConfigurationProperties
Possibility of configuration specific to a deployment environment
 java -jar myapp,jar --spring.profiles.active=production
 Change application-production.properties
Self-configured tests
The spring-boot-starter-test starter pulls test frameworks :
JUnit, Spring Test, AssertJ, Mockito, JsonPath, JSONassert et Hamcrest.
Functionality of «slicing test»
Allows to segment tests : presentation layer, REST controllers, DAO …
Spring Boot is responsible for creating a dedicated application context
Annotations game : @WebMvcTest, @JsonTest, @DataJpaTest, @RestClientTest
Possibility to create your own slice (ex: @DataJdbcTest)
Automatic creation of mocks with @MockBean
For integration testing, @SpringBootTest allows you to start a servlet
container
@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"));
}
}
Unit test example
Initialization of a web application
context scanning Spring MVC beans
and configuration of MockMvc
Mockito simulacrum recorded in the
Spring application context and made
available by auto-wiring
Alias for SpringJUnit4ClassRunner
Live coding
Using Spring Initializr from IntelliJ : WEB, JPA, thymeleaf
Using the H2 database
Creation of a service REST HelloWorld
Logger configuration
Tomcat to Jetty migration
Actuator demo
Banner customization
Running a self-executing JAR
Port change by configuration, parameter and Spring profile
Case studies: Spring Petclinic migration
And many other features
Customizing the Startup Banner
Ready for Production
Initializing databases
Exécution de jobs Spring Batch
Shell remote (CRaSH)
Spring Boot CLI
Use Jetty or Undertow instead of Tomcat
Live Reload & Hot swapping
Installation as a Linux or Windows service
Conclusion
Allows you to quickly set up an application Java based on Spring
Drastically reduces the Spring configuration
Can replace a Business base
Say goodbye to the good old big application servers
Make JAR not WAR
Resources
Spring Boot Reference Manual(Pivotal)
Bootiful Microservice (Josh Long)
Custom test slice with Spring Boot 1.4 (S. Nicoll)
Spring Guides (Pivotal)

Contenu connexe

Tendances

Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action Alex Movila
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depthVinay Kumar
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slides
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slidesSpring - Part 2 - Autowiring, Annotations, Java based Configuration - slides
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slidesHitesh-Java
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkHùng Nguyễn Huy
 

Tendances (20)

Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
Xke spring boot
Xke spring bootXke spring boot
Xke spring boot
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slides
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slidesSpring - Part 2 - Autowiring, Annotations, Java based Configuration - slides
Spring - Part 2 - Autowiring, Annotations, Java based Configuration - slides
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
ReactJS presentation.pptx
ReactJS presentation.pptxReactJS presentation.pptx
ReactJS presentation.pptx
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Spring boot jpa
Spring boot jpaSpring boot jpa
Spring boot jpa
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 

Similaire à Introduction to Spring Boot

比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 
Spring 3: What's New
Spring 3: What's NewSpring 3: What's New
Spring 3: What's NewTed Pennings
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSam Brannen
 
Session 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaSession 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaPawanMM
 
Database connect
Database connectDatabase connect
Database connectYoga Raja
 
Breaking free from static abuse in test automation frameworks and using Sprin...
Breaking free from static abuse in test automation frameworks and using Sprin...Breaking free from static abuse in test automation frameworks and using Sprin...
Breaking free from static abuse in test automation frameworks and using Sprin...Abhijeet Vaikar
 
Spring talk111204
Spring talk111204Spring talk111204
Spring talk111204s4al_com
 
Mastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaMastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaDenilson Nastacio
 
Testing microservices: Tools and Frameworks
Testing microservices: Tools and FrameworksTesting microservices: Tools and Frameworks
Testing microservices: Tools and FrameworksPiotr Mińkowski
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Peter Pilgrim
 
Introduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsIntroduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsFulvio Corno
 

Similaire à Introduction to Spring Boot (20)

比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Spring 3: What's New
Spring 3: What's NewSpring 3: What's New
Spring 3: What's New
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing Support
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
JDBC Part - 2
JDBC Part - 2JDBC Part - 2
JDBC Part - 2
 
Session 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise JavaSession 24 - JDBC, Intro to Enterprise Java
Session 24 - JDBC, Intro to Enterprise Java
 
Junit_.pptx
Junit_.pptxJunit_.pptx
Junit_.pptx
 
Database connect
Database connectDatabase connect
Database connect
 
Breaking free from static abuse in test automation frameworks and using Sprin...
Breaking free from static abuse in test automation frameworks and using Sprin...Breaking free from static abuse in test automation frameworks and using Sprin...
Breaking free from static abuse in test automation frameworks and using Sprin...
 
Jdbc[1]
Jdbc[1]Jdbc[1]
Jdbc[1]
 
JDBC programming
JDBC programmingJDBC programming
JDBC programming
 
Spring
SpringSpring
Spring
 
Spring talk111204
Spring talk111204Spring talk111204
Spring talk111204
 
Mastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaMastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for Java
 
Testing microservices: Tools and Frameworks
Testing microservices: Tools and FrameworksTesting microservices: Tools and Frameworks
Testing microservices: Tools and Frameworks
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
 
Ojdbc
OjdbcOjdbc
Ojdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Introduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsIntroduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applications
 

Dernier

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 

Dernier (20)

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 

Introduction to Spring Boot

  • 1. Introduction to Spring Boot October 4, 2016 Purbarun Chakrabarti
  • 2. Objectives Make you want to use Spring Boot Demystify how self-configuration works Show Spring Boot in action Share a return of migration experience to Spring Boot
  • 3. Summary The principles of Spring Boot The traditional Hello World Application configuration Simplified tests Demo: development of a Hello World application Case studies: migration of the Spring Petclinic application Overview of other features
  • 4. Strong ideas Accelerate the development of Spring applications Convention over Configuration No code generated Easy deployment Ready for production
  • 5. Hello World REST Application = 1 Java Class +1 pom.xml/build.gradle @SpringBootApplication @RestController public class HelloWorld { public static void main(String[] args) { SpringApplication.run(HelloWorld.class, args); } @RequestMapping("/") public String hello() { return "Hello World!"; } }
  • 6. Technologies supported Core : Spring Security, JTA, Spring Cache, Spring Session Web : Spring MVC, Websocket, Jersey, Mobile, HATEOS Template engines : Freemaker, Thymeleaf, Groovy, Mustache Database RDBMS : Spring Data JPA, JDBC, JOOQ NoSQL : Redis, MongoDB, Elasticsearch, Cassandra Spring Cloud Suite: Eureka, Hystrix, Turbine, AWS, OAuth2 I/O : Spring Batch and Integration, JavaMail, Camel, JMS, AMQP Social : Facebook, Linkedin, Twitter
  • 7. Auto-configuration (1/2) The @SpringBootApplication annotation triggers the automatic configuration of the Spring infrastructure @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } When the application starts, Spring Boot : Scans all classes of @Configuration Application-specific configuration classes Spring Boot Classes Suffixed by AutoConfiguration Use the JARs present in the classpath to make decisions
  • 8. Auto-configuration (2/2) Based on conditional activations @Conditional, @ConditionalOnProperty, @ConditionalOnClass, @ConditionalOnMissingClass ,@ConditionalOnMissingBean , @ConditionalOnWebApplication, @ConditionalOnNotWebApplication, @ConditionalOnExpression Possibility to create your own self-configuring library
  • 9. Spring JDBC auto-configuration @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); } }
  • 10. Auto-configuration of the DataSource Complexity of DataSourceAutoConfiguration DataSource recovery by JNDI Choice of connection pool : Tomcat, HikariCP , Commons DBCP 1 or 2 Setting up the connection to the database Configurationapplication.properties spring.datasource.driver-class-name=com.mysql.jdbc.Driver Embedded database by JAR analysis in the classpath XA Support Pool exposure via JMX
  • 11. Application Configuration Centralized in  application.properties  or application.yml Completion in the IDE Expandable and TypeSafe configuration  @ConfigurationProperties Possibility of configuration specific to a deployment environment  java -jar myapp,jar --spring.profiles.active=production  Change application-production.properties
  • 12. Self-configured tests The spring-boot-starter-test starter pulls test frameworks : JUnit, Spring Test, AssertJ, Mockito, JsonPath, JSONassert et Hamcrest. Functionality of «slicing test» Allows to segment tests : presentation layer, REST controllers, DAO … Spring Boot is responsible for creating a dedicated application context Annotations game : @WebMvcTest, @JsonTest, @DataJpaTest, @RestClientTest Possibility to create your own slice (ex: @DataJdbcTest) Automatic creation of mocks with @MockBean For integration testing, @SpringBootTest allows you to start a servlet container
  • 13. @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")); } } Unit test example Initialization of a web application context scanning Spring MVC beans and configuration of MockMvc Mockito simulacrum recorded in the Spring application context and made available by auto-wiring Alias for SpringJUnit4ClassRunner
  • 14. Live coding Using Spring Initializr from IntelliJ : WEB, JPA, thymeleaf Using the H2 database Creation of a service REST HelloWorld Logger configuration Tomcat to Jetty migration Actuator demo Banner customization Running a self-executing JAR Port change by configuration, parameter and Spring profile
  • 15. Case studies: Spring Petclinic migration
  • 16. And many other features Customizing the Startup Banner Ready for Production Initializing databases Exécution de jobs Spring Batch Shell remote (CRaSH) Spring Boot CLI Use Jetty or Undertow instead of Tomcat Live Reload & Hot swapping Installation as a Linux or Windows service
  • 17. Conclusion Allows you to quickly set up an application Java based on Spring Drastically reduces the Spring configuration Can replace a Business base Say goodbye to the good old big application servers Make JAR not WAR
  • 18. Resources Spring Boot Reference Manual(Pivotal) Bootiful Microservice (Josh Long) Custom test slice with Spring Boot 1.4 (S. Nicoll) Spring Guides (Pivotal)