Spring Boot

Learn Spring Boot Tutorial with Complete Introduction

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 🙂.

If you are already familiar with spring framework then it is too easy to learn because Spring Boot is nothing but it developed on top of existing Spring Framework. It uses a completely new development model to make Java Development very easy by avoiding some tedious development steps and boilerplate code and configuration.

Spring Boot Tutorial Table of Contents

  1. Introducing to Spring Boot
  2. What is the Spring Boot?
  3. Spring Boot Primary Goals
  4. Why New Project Need Spring Boot?
  5. What Spring Boot isn’t
  6. Pros/Cons of Spring Boot
  7. Spring boot releases
  8. Getting started with Spring
  9. Hello World example using spring boot
  10. Starter POMs
  11. Servlet containers support
  12. Template Engines Support
  13. Caching Support
  14. Spring Boot & Spring MVC
  15. Spring boot tutorials
  16. Videos
  17. Adoption
  18. 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.

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. We take an opinionated view of the spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
You can use Spring Boot to create Java applications that can be started using java -jar or more traditional war deployments. We also provide a command line tool that runs “spring scripts”.

2. What is spring boot?

In this Spring Boot Tutorial, first of all, Spring Boot is not a framework, it is a way to ease to create a stand-alone application with minimal or zero configurations. It is an approach to develop a spring based application with very less configuration. It provides defaults for code and annotation configuration to quick start new spring projects within no time. Spring Boot leverages existing spring projects as well as Third party projects to develop production ready applications. It provides a set of Starter Pom or Gradle build files which one can use to add required dependencies and also facilitate autoconfiguration.
 
Spring Boot automatically configures required classes depending on the libraries on its classpath. Suppose your application wants to interact with DB, if there are Spring Data libraries on classpath then it automatically sets up a connection to DB along with the Data Source class.

Let’s see the primary goals of the Spring Boot in this Spring Boot Tutorial.

3. Spring Boot Primary Goals

Let’s see Spring Boot primary goals are following in this Spring Boot Tutorial:
  • 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?

Suppose we are developing one of Hello World application in Spring Framework, for that there is only one item is specific to developing the Hello World functionality: the controller. The rest of it is generic boilerplate that you’d need for any web application developed with Spring. But if all Spring web applications need it, why should you have to provide it? So there are the following things any 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?

As above mention Spring Boot is not a framework to write applications, it helps you to develop and build, package and deploy an application with minimal configuration or zero configuration.
It is not an application server. But it’s the embedded servlet container that provides application server functionality, not Spring Boot itself.
Similarly, Spring Boot doesn’t implement any enterprise Java specifications such as JPA or JMS. For example, Spring Boot doesn’t implement JPA, but it does support JPA by auto-configuring the appropriate beans for a JPA implementation (such as Hibernate)
Finally, Spring Boot doesn’t employ any form of code generation to accomplish its magic. Instead, it leverages conditional configuration features from Spring 4, along with transitive dependency resolution offered by Maven and Gradle, to automatically configure beans in the Spring application context.
In short, at its heart, Spring Boot is just Spring.
 
Future Spring projects would not have any XML configurations as part of it, everything will be handled by the project Spring Boot. 

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:

It is a very tough and time-consuming process to convert existing or legacy Spring Framework projects into Spring Boot Applications. It is applicable only for brand new/Greenfield Spring Projects.

7. Spring boot releases

Latest Release: Spring Boot 1.3.3 and 1.4.0 available now. You require minimum Spring Framework 4.2.2 for this version.
  • ·        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

Ultimately, a Spring Boot project is just a regular Spring project that happens to leverage Spring Boot starters and auto-configuration. To Start Opinionated Approach to create Spring Boot Applications, The Spring Team (The Pivotal Team) has provided the following three approaches.
We can develop two flavours of Spring-Based Applications using Spring Boot
  • Java-Based Applications
  • Groovy Applications
We can use Spring Boot CLI or Spring STS IDE or Spring Initializr Website to develop Spring Boot Groovy Applications. However, we can use Spring STS IDE or Spring Initializr Website to develop Spring Boot Java Applications.
Anyhow, Groovy is also JVM language almost similar to Java Language. We can combine both Groovy and Java into one Project. Because like Java files, Groovy files are finally compiled into *.class files only. Both *.groovy and *.java files are converted to *.class file (Same byte code format).
Spring Boot Framework Programming model is inspired by Groovy Programming model. It internally uses some Groovy based techniques and tools to provide default imports and configuration.
Spring Boot Framework also combined existing Spring Framework annotations into some simple or single annotations. We will explore those annotations one by one in coming posts with some real-time examples.
Spring Boot Framework drastically changes Spring-Java Based Applications Programming model into the new Programming model. As of now, Spring Boot is at the initial stage only but the future is all about Spring Boot only.

Spring Boot CLI

It is the easiest and quickest way to start using the Spring Boot. It is a command line tool used for executing the groovy scripts. In summary, you can install this tool by following these steps:
1.     Download the binary distributions for this project from here. Spring Boot CLI requires Java JDK v1.6 or above in order to run. Groovy v2.1 is packaged as part of this distribution, and therefore does not need to be installed (any existing Groovy installation is ignored)
2.     If you unpack the zip file, you will find spring.bat which will check the all the settings. This script can be found under the directory /bin.

9. Hello World example using spring boot

We can develop two flavours of Spring-Based Applications using Spring Boot.
  • Groovy Applications
  • Java-Based Applications

Groovy Applications:

Let’s develop a simple “Hello World!” web application. Create the app.groovy with the following lines of code. Here we are going to explain the same example from Spring Boot documentation.
@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        return "Hello World!"
    }

}

Run it as follows:

$ spring run app.groovy
You can invoke the http://localhost:8080 in your browser and you will see the result “Hello World!”.The above command can invoke the application and run it in the web server.
Spring Boot does this by dynamically adding key annotations to your code and leveraging Groovy Grape to pull down needed libraries to make the app run. If any dependencies are required like web server, etc. can be resolved by the Spring Boot itself.

Java-Based Applications

Let’s develop a simple “Hello World!” web application in Java that highlights some of Spring Boot’s key features. We’ll use Maven to build this project since most IDEs support it.
If you are a Java developer you can use start.spring.io to generate a basic project.

Build with Maven

 Pom.xml
<?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>

Once Maven is in the classpath, it is very easy to create a maven project and run the example. Just create a Java file with the below code snippet:
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);
    }
}

Once you have created the above Java file and the pom.xml in the same directory, please run the following command:
$ mvn package
$ java -jar target/ my-spring-boot-project-0.0.1-SNAPSHOT.jar
The first statement invokes the pom.xml and builds the complete package by downloading all the dependencies. The second statement makes the spring application and bundle with the web server. As said in the above groovy example, you can invoke the application in the browser.

10. Starters

Starters are a set of convenient dependency descriptors that you can include in your application. The starters contain a lot of the dependencies that you need to get a project up and running quickly and with a consistent, supported a set of managed transitive dependencies.
The starter POMs are convenient dependency descriptors that can be added to your application’s Maven. In simple words, if you are developing a project that uses Spring Batch for batch processing, you just have to include spring-boot-starter-batch that will import all the required dependencies for the Spring Batch application. This reduces the burden of searching and configuring all the dependencies required for a framework.

List of Starters

Spring offers a wide range of starters POMs that can be used in your application. Here is the list of started POMs mention in this Spring Boot Tutorial.
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

The following embedded servlet containers are supported out of the box.
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+
You can also deploy Spring Boot applications to any Servlet 3.0+ compatible container.

12. Template engines Support

Spring Boot includes auto-configuration support for the following templating engines mention in this Spring Boot Tutorial.

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 Boot is well suited for web application development. You can easily create a self-contained HTTP server using embedded Tomcat, Jetty, or Undertow. Most web applications will use the spring-boot-starter-web module to get up and running quickly.

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

Spring Boot provides auto-configuration for Spring MVC that works well with most applications. The auto-configuration adds the following features on top of Spring’s defaults:
  • 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

16. Videos

In this Spring Boot Tutorial, here is the one good video on Spring Book introduction by Josh Long

17. Spring Boot Adoption

 Let’s see Spring Boot adoption in the Spring Boot Tutorial.
Adoption in March 2016
Eugen has published his original report here.
In March of 2016, 81.1% of Spring users are using Spring 4 – so definitely a lot of growth since last year’s 65%:
Spring Boot is even more interesting, growing from 34% last year to 52.8%:
Spring Boot Adoption in 2015
Eugen has published a report about the Spring Boot adoption here. This chart shows that there are more developers started using Spring Boot for their project development.

18. Summary

Congratulations! You have learned Spring Boot introduction and some essentials points of it and built a simple web application with Spring Boot and learned how it can ramp up your development pace. In this Spring Boot Tutorial, you also turned on some handy production services. This is only a small sampling of what Spring Boot can do. Checkout SpringBoot’s online docs if you want to dig deeper.
Happy Spring Boot Framework Learning with this Spring Boot Tutorial!
Previous
Next
Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

2 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

2 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

2 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

2 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

2 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

3 years ago