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 reduce 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 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.
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.
Limitation of Spring Boot:
It is 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.
- 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
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.
- Using Spring Boot CLI Tool
- Spring STS IDE
- Using Spring Initializr (Website http://start.spring.io/)
We can develop two flavors 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 new Programming model. As of now, Spring Boot is at initial stage only but 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.
Hello World example using spring boot
We can develop two flavors 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 explain same example from Spring Boot documentation.
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 Java developer you can use start.spring.io to generate a basic project.
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 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 wide range of started POMs that can be used in your application. Here is the list of started POMs mention in this Spring Boot Tutorial.
Name | Description |
---|---|
spring-boot-starter-test | Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito |
spring-boot-starter-mobile | Starter for building web applications using Spring Mobile |
spring-boot-starter-social-twitter | Starter for using Spring Social Twitter |
spring-boot-starter-cache | Starter for using Spring Framework’s caching support |
spring-boot-starter-activemq | Starter for JMS messaging using Apache ActiveMQ |
spring-boot-starter-jta-atomikos | Starter for JTA transactions using Atomikos |
spring-boot-starter-aop | Starter for aspect-oriented programming with Spring AOP and AspectJ |
spring-boot-starter-web | Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container |
spring-boot-starter-data-elasticsearch | Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch |
spring-boot-starter-jdbc | Starter for using JDBC with the Tomcat JDBC connection pool |
spring-boot-starter-batch | Starter for using Spring Batch, including HSQLDB in-memory database |
spring-boot-starter-social-facebook | Starter for using Spring Social Facebook |
spring-boot-starter-web-services | Starter for using Spring Web Services |
spring-boot-starter-jta-narayana | Spring Boot Narayana JTA Starter |
spring-boot-starter-thymeleaf | Starter for building MVC web applications using Thymeleaf views |
spring-boot-starter-mail | Starter for using Java Mail and Spring Framework’s email sending support |
spring-boot-starter-jta-bitronix | Starter for JTA transactions using Bitronix |
spring-boot-starter-data-mongodb | Starter for using MongoDB document-oriented database and Spring Data MongoDB |
spring-boot-starter-validation | Starter for using Java Bean Validation with Hibernate Validator |
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 |
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 |
spring-boot-starter-data-cassandra | Starter for using Cassandra distributed database and Spring Data Cassandra |
spring-boot-starter-hateoas | Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS |
spring-boot-starter-integration | Starter for using Spring Integration |
spring-boot-starter-data-solr | Starter for using the Apache Solr search platform with Spring Data Solr |
spring-boot-starter-freemarker | Starter for building MVC web applications using Freemarker views |
spring-boot-starter-jersey | Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web |
spring-boot-starter | Core starter, including auto-configuration support, logging and YAML |
spring-boot-starter-data-couchbase | Starter for using Couchbase document-oriented database and Spring Data Couchbase |
spring-boot-starter-artemis | Starter for JMS messaging using Apache Artemis |
spring-boot-starter-cloud-connectors | Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku |
spring-boot-starter-social-linkedin | Stater for using Spring Social LinkedIn |
spring-boot-starter-velocity | Starter for building MVC web applications using Velocity views. Deprecated since 1.4 |
spring-boot-starter-data-rest | Starter for exposing Spring Data repositories over REST using Spring Data REST |
spring-boot-starter-data-gemfire | Starter for using GemFire distributed data store and Spring Data GemFire |
spring-boot-starter-groovy-templates | Starter for building MVC web applications using Groovy Templates views |
spring-boot-starter-amqp | Starter for using Spring AMQP and Rabbit MQ |
spring-boot-starter-hornetq | Starter for JMS messaging using HornetQ. Deprecated as of 1.4 in favor of spring-boot-starter-artemis |
spring-boot-starter-ws | Starter for using Spring Web Services. Deprecated as of 1.4 in favor of spring-boot-starter-web-services |
spring-boot-starter-security | Starter for using Spring Security |
spring-boot-starter-data-redis | Starter for using Redis key-value data store with Spring Data Redis and the Jedis client |
spring-boot-starter-websocket | Starter for building WebSocket applications using Spring Framework’s WebSocket support |
spring-boot-starter-mustache | Starter for building MVC web applications using Mustache views |
spring-boot-starter-data-neo4j | Starter for using Neo4j graph database and Spring Data Neo4j |
spring-boot-starter-data-jpa | Starter for using Spring Data JPA with Hibernate |
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.
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.
Caching SupportC
The Spring Framework provides support for transparently adding caching to an application. At its core, the abstraction applies caching 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.
In this Spring Boot Tutorial, I have mentioned 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
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