Hello friends Welcome to Spring Boot Tutorial, today I am going to discuss one of the latest innovation by the Spring Team (Pivotal Team) is Spring Boot, oops… sorry..friends yes I know I am late for this discussion right now but it is not too late for spring boot because this is actually time for major adoption of Spring Boot for scratch project in the spring framework 🙂.
Spring Boot Tutorial Table of Contents
- Introducing to Spring Boot
- What is the Spring Boot?
- Spring Boot Primary Goals
- Why New Project Need Spring Boot?
- What Spring Boot isn’t
- Pros/Cons of Spring Boot
- Spring boot releases
- Getting started with Spring
- Hello World example using spring boot
- Starter POMs
- Servlet containers support
- Template Engines Support
- Caching Support
- Spring Boot & Spring MVC
- Spring boot tutorials
- Videos
- Adoption
- Summary
1. Introducing to Spring Boot
Spring Team has released one of major innovation on the top of the existing Spring Framework is Spring Boot. It is a completely new project from Pivotal Team (The Spring Team). Spring Boot is their latest innovation to keep up to date with the changing technology needs. The primary motivation behind developing Spring Boot is to simplify the process for configuring and deploying the spring applications. This Spring Boot Tutorial gives a complete introduction about Spring Boot.
Spring Boot offers a new paradigm for developing Spring applications with minimal friction. With Spring Boot, you’ll be able to develop Spring applications with more agility and be able to focus on addressing your application’s functionality needs with minimal (or possibly no) thought of configuring Spring itself. It uses completely new development model to make Java Development very easy by avoiding some tedious development steps and boilerplate code and configuration.
2. What is spring boot?
Let’s see the primary goals of the Spring Boot in this Spring Boot Tutorial.
3. Spring Boot Primary Goals
- Provide a radically faster and widely accessible getting started experience for all Spring development.
- Be opinionated out of the box, but get out of the way quickly as requirements start to diverge from the defaults.
- Provide a range of non-functional features that are common to large classes of projects (e.g. embedded servers, security, metrics, health checks, externalized configuration).
- Absolutely no code generation and no requirement for XML configuration, to avoid XML Configuration completely
- To avoid defining more Annotation Configuration(It combined some existing Spring Framework Annotations to a simple and single Annotation)
- Spring Boot avoid writing lots of import statements
- To provide some defaults to quick start new projects within no time.
4. Why New Project Need Spring Boot?
- To ease the Java-based applications Development, Unit Test and Integration Test Process.
- To reduce Development, Unit Test and Integration Test time by providing some defaults.
- Spring Boot increase Productivity.
- When we talk about defaults, Spring Boot has its own opinions. If you are not specifying the details, it will use its own default configurations. If you want persistence, but don’t specify anything else in your POM file, then Spring Boot configures Hibernate as a JPA provider with an HSQLDB database.
- To provide a bunch of non-functional features/solutions that are very much common to large scale projects (e.g. embedded servers, security, metrics, health checks, externalized configuration).
5. What Spring Boot Isn’t?
6. Pros/Cons of Spring Boot
Pros of Spring Boot:
- It is very easy to develop Spring Based applications with Java or Groovy.
- Spring Boot reduces lots of development time and increases productivity.
- It avoids writing lots of boilerplate Code, Annotations and XML Configuration.
- It is very easy to integrate Spring Boot Application with its Spring Ecosystem like Spring JDBC, Spring ORM, Spring Data, Spring Security etc.
- Spring Boot follows “Opinionated Defaults Configuration” Approach to reducing Developer effort
- It provides Embedded HTTP servers like Tomcat, Jetty etc. to develop and test our web applications very easily.
- It provides CLI (Command Line Interface) tool to develop and test Spring Boot (Java or Groovy) Applications from command prompt very easily and quickly.
- Spring Boot provides lots of plugins to develop and test Spring Boot Applications very easily using Build Tools like Maven and Gradle
- It provides lots of plugins to work with embedded and in-memory Databases very easily.
Limitation of Spring Boot:
7. Spring boot releases
- · Executable JAR Layout
- · Startup error improvements
- · Hibernate 5
- · Spring Framework 4.3
- · Third Party Library
- · Custom JSON Serializer and Deserializer
- · New auto-configuration support
- Couchbase
- Neo4j
- Narayana transactional manager
- Caffeine Cache
- · Actuator improvements
- · Testing improvements
8. Getting started with Spring Boot
- Using the Spring Boot CLI Tool
- Spring STS IDE
- Using Spring Initializr (Website http://start.spring.io/)
- Java-Based Applications
- Groovy Applications
Spring Boot CLI
9. Hello World example using spring boot
- Groovy Applications
- Java-Based Applications
Groovy Applications:
@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { return "Hello World!" } }
Run it as follows:
$ spring run app.groovy
Java-Based Applications
Build with Maven
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.doj</groupId> <artifactId>my-spring-boot-project</artifactId> <version>0.0.1-SNAPSHOT </version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
package hello; import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @Controller @EnableAutoConfiguration public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } }
$ mvn package $ java -jar target/ my-spring-boot-project-0.0.1-SNAPSHOT.jar
10. Starters
List of Starters
Name
|
Description
|
Pom
|
spring-boot-starter-test | Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito | Pom |
spring-boot-starter-mobile | Starter for building web applications using Spring Mobile | Pom |
spring-boot-starter-social-twitter | Starter for using Spring Social Twitter | Pom |
spring-boot-starter-cache | Starter for using Spring Framework’s caching support | Pom |
spring-boot-starter-activemq | Starter for JMS messaging using Apache ActiveMQ | Pom |
spring-boot-starter-jta-atomikos | Starter for JTA transactions using Atomikos | Pom |
spring-boot-starter-aop | Starter for aspect-oriented programming with Spring AOP and AspectJ | Pom |
spring-boot-starter-web | Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container | Pom |
spring-boot-starter-data-elasticsearch | Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch | Pom |
spring-boot-starter-jdbc | Starter for using JDBC with the Tomcat JDBC connection pool | Pom |
spring-boot-starter-batch | Starter for using Spring Batch, including HSQLDB in-memory database | Pom |
spring-boot-starter-social-facebook | Starter for using Spring Social Facebook | Pom |
spring-boot-starter-web-services | Starter for using Spring Web Services | Pom |
spring-boot-starter-jta-narayana | Spring Boot Narayana JTA Starter | Pom |
spring-boot-starter-thymeleaf | Starter for building MVC web applications using Thymeleaf views | Pom |
spring-boot-starter-mail | Starter for using Java Mail and Spring Framework’s email sending support | Pom |
spring-boot-starter-jta-bitronix | Starter for JTA transactions using Bitronix | Pom |
spring-boot-starter-data-mongodb | Starter for using MongoDB document-oriented database and Spring Data MongoDB | Pom |
spring-boot-starter-validation | Starter for using Java Bean Validation with Hibernate Validator | Pom |
spring-boot-starter-jooq | Starter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc | Pom |
spring-boot-starter-redis | Starter for using Redis key-value data store with Spring Data Redis and the Jedis client. Deprecated as of 1.4 in favor of spring-boot-starter-data-redis | Pom |
spring-boot-starter-data-cassandra | Starter for using Cassandra distributed database and Spring Data Cassandra | Pom |
spring-boot-starter-hateoas | Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS | Pom |
spring-boot-starter-integration | Starter for using Spring Integration | Pom |
spring-boot-starter-data-solr | Starter for using the Apache Solr search platform with Spring Data Solr | Pom |
spring-boot-starter-freemarker | Starter for building MVC web applications using Freemarker views | Pom |
spring-boot-starter-jersey | Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web | Pom |
spring-boot-starter | Core starter, including auto-configuration support, logging and YAML | Pom |
spring-boot-starter-data-couchbase | Starter for using Couchbase document-oriented database and Spring Data Couchbase | Pom |
spring-boot-starter-artemis | Starter for JMS messaging using Apache Artemis | Pom |
spring-boot-starter-cloud-connectors | Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku | Pom |
spring-boot-starter-social-linkedin | Stater for using Spring Social LinkedIn | Pom |
spring-boot-starter-velocity | Starter for building MVC web applications using Velocity views. Deprecated since 1.4 | Pom |
spring-boot-starter-data-rest | Starter for exposing Spring Data repositories over REST using Spring Data REST | Pom |
spring-boot-starter-data-gemfire | Starter for using GemFire distributed data store and Spring Data GemFire | Pom |
spring-boot-starter-groovy-templates | Starter for building MVC web applications using Groovy Templates views | Pom |
spring-boot-starter-amqp | Starter for using Spring AMQP and Rabbit MQ | Pom |
spring-boot-starter-hornetq | Starter for JMS messaging using HornetQ. Deprecated as of 1.4 in favor of spring-boot-starter-artemis | Pom |
spring-boot-starter-ws | Starter for using Spring Web Services. Deprecated as of 1.4 in favor of spring-boot-starter-web-services | Pom |
spring-boot-starter-security | Starter for using Spring Security | Pom |
spring-boot-starter-data-redis | Starter for using Redis key-value data store with Spring Data Redis and the Jedis client | Pom |
spring-boot-starter-websocket | Starter for building WebSocket applications using Spring Framework’s WebSocket support | Pom |
spring-boot-starter-mustache | Starter for building MVC web applications using Mustache views | Pom |
spring-boot-starter-data-neo4j | Starter for using Neo4j graph database and Spring Data Neo4j | Pom |
spring-boot-starter-data-jpa | Starter for using Spring Data JPA with Hibernate | Pom |
11. Servlet containers Support
Name
|
Servlet Version
|
Java Version
|
Tomcat 8
|
3.1
|
Java 7+
|
Tomcat 7
|
3.0
|
Java 6+
|
Jetty 9
|
3.1
|
Java 7+
|
Jetty 8
|
3.0
|
Java 6+
|
Undertow 1.1
|
3.1
|
Java 7+
|
12. Template engines Support
Spring Boot includes auto-configuration support for the following templating engines mention in this Spring Boot Tutorial.
- · FreeMarker
- · Groovy
- · Thymeleaf
- · Velocity (deprecated in 1.4)
- · Mustache
JSPs should be avoided if possible; there are several known limitations when using them with embedded servlet containers. If you are using any of the above template engines, spring boot will automatically pick the templates from src/main/resources/templates.
13. Caching Support
The Spring Framework provides support for transparently adding caching to an application. At its core, the abstraction applies to cache to methods, reducing thus the number of executions based on the information available in the cache. The caching logic is applied transparently, without any interference to the invoker. Let’s see the code as mention below here Spring Boot Tutorial.
import javax.cache.annotation.CacheResult; import org.springframework.stereotype.Component; @Component public class MathService { @CacheResult public int computePiDecimal(int i) { // ... } }
In this Spring Boot Tutorial, I have mentioned the following list that Spring Boot tries to detect the following providers (in this order):
- · Generic
- · JCache (JSR-107)
- · EhCache 2.x
- · Hazelcast
- · Infinispan
- · Couchbase
- · Redis
- · Caffeine
- · Guava
- · Simple
14. Spring Boot & Spring MVC
Spring MVC lets you create special @Controller or @RestController beans to handle incoming HTTP requests. Methods in your controller are mapped to HTTP using @RequestMapping annotations.
Spring MVC auto-configuration
- Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
- Support for serving static resources, including support for WebJars (see below).
- Automatic registration of Converter, GenericConverter, Formatter beans.
- Support for HttpMessageConverters (see below).
- Automatic registration of MessageCodesResolver (see below).
- Static index.html support.
- Custom Favicon support.
- Automatic use of a ConfigurableWebBindingInitializer bean
15. Spring boot tutorial
-
- Spring Boot Interview Questions and Answers
- Essentials and Key Components of Spring Boot
- Spring Boot CLI Installation and Hello World Example
- Initializr Web Interface
- Spring Boot Initializr With IDEs
- Spring Boot Initializr With Spring Boot CLI
- Installing Spring Boot
- Developing your first Spring Boot application
- External Configurations for Spring Boot Applications
- Logging Configuration in Spring Boot
- Spring Boot and Spring MVC
- Working with SQL Databases and Spring Boot
- MySQL Configurations
- Spring Data JPA using Spring Boot Application
- Application Spring Boot with NoSQL technologies
- Cache Tutorial Spring Boot
- Spring Security Tutorial with Spring Boot
- Spring Boot and MongoDB in REST Application
- Complete Guide for Spring Boot Actuator
- Microservices with Spring Boot
16. Videos
In this Spring Boot Tutorial, here is the one good video on Spring Book introduction by Josh Long
Not a good tutorial. It could be better. Language used is bookish, lack of practical examples and use cases, Too vague and incomplete.
This tutorial is useful for me. Thanks Dinesh!
Can you provide an alternate in that case?
Soumya you can’t expect everything like spoon feeding kind of things what is there in the book , but dinesh is trying to give basic things to understand the new emerging technology .
So, you need to appreciate him what he is giving .
Thanks Guys for reading my articles and also I always try to put the best examples with each article. I will welcome for every feedback of my readers.
Hi Dinesh,
I have changed the port :8888 and ran the spring boot hello world application. I have got the below error ,
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Sep 23 00:28:35 IST 2018
There was an unexpected error (type=Not Found, status=404).
No message available
Can you please help me to solve this error. Please post the solutions here. That will be helpful for me.
Hi
Nice article…This is a test comment from vaibhav bandya..
This tutorial is useful for me. Thanks Dinesh!