Pivotal, last week, announced the first general availability release of their Spring Boot framework. The release comes after 18 months of development on the framework that decorates the popular Spring IO platform with simplifications that are are geared toward developer productivity.
Boot was originally introduced to the Java development community in the day's leading up to last year's SpringOne 2GX conference. It was popularized most heavily after Spring Security team lead, Rob Winch, posted an entire Spring Framework 4.0 application in a tweet. The catalyst for Boot was originally an issue reported on the Spring Framework's JIRA, which intended to outline architectural design for containerless, Spring-backed web applications.
As a component member of the Spring IO platform, Boot resides within the "IO Execution" layer, which is allocated for domain-specific runtimes that utilize the platform's full scope. The framework's mission statement is to provide a development experience that makes it "easy to create stand-alone, production-grade Spring based Applications that you can 'just run'" with "absolutely no code generation and no requirement for XML configuration". To facilitate this, Boot provides fixtures atop Spring Framework 4.0, and takes an opinionated, convention-over-configuration approach to bootstrapping an application's runtime context. This allows the framework to provide an embedded runtime container, along with configuration for mapping controllers, without the need for a more-traditional web.xml configuration file. The framework also provides opinionated fixtures for building container-less web applications, by supplying plugins for both Maven and Gradle, which are capable of producing an embedded, runnable JAR file. Details for building web applications with Spring Boot are available in the framework's comprehensive reference manual.
InfoQ caught up with the Spring Boot team to ask them questions about the framework and the latest release. We started at the most-fundamental level by asking them why they decided to pursue containerless web applications. They responsed:
- Little to configure to get coding
- More functional deployment unit - boot builds a configured tomcat/jetty right into the JAR file!
- Self contained executables, running them as simple as: java -jar
- Cloud, PaaS, Virtualization friendly
The team expounded on the last bullet-point by noting:
Generally speaking, containerless web apps are very much aligned with the spring philosophy of being self-contained, portable. Since today’s PaaS environments provide much of the management, scale out, and reliability features already, Boot is left free to focus on developer happiness, and lightweight metrics, reporting, and an ultra light container. Great for application or service deployment in the cloud, where the BYOC (Bring your own container) is a natural PaaS approach, pioneered by Heroku, and embraced by CloudFoundry.
Containerless deployments are not a strict-requirement of the framework. Applications can still leverage the opinionated, convention-over-configuration approach that Boot offers, while deploying to their application server of choice. The team made reference to this by stating, "If you want a container, no problem! Boot’s war files can be deployed to any Servlet 3.0-compliant application container. Some compliant containers include Tomcat 7+, Jetty 8, Glassfish 3.x, JBoss AS 6.x/7.x, and Websphere 8.0."
When asked what they felt was the most compelling part of Spring Boot for new adopters, the team responded, "The groundbreaking level of production-ready productivity it enables, combined with the breadth of what boot can offer via the rest of the Spring IO platform. Spring Boot isn't a stripped down version of Spring, but production ready Spring - that can integrate with any other part of the platform, as well as Groovy/Grails." They went on to reinforce their confidence in the framework's production- and cloud-rediness by commenting, "we run our own website on it, which serves documentation to millions of Spring developers worldwide". The Spring.io website is a reference project for Spring Boot, which was open-sourced last month under the codename "Project Sagan".
We asked how Boot has affected Spring adoption, and they responded that they'd received a wide array of feedback from "dyed-in-the-wool, hardcore Ruby/Rails programmers to other JVM users". Specifically, they'd seen "record all time high numbers (since ~2004) after the announcement of Boot", which included "a landslide of web traffic, maven downloads, StackOverflow questions, Google searches, indeed.com jobs, and YouTube channel views that outpace even the Java YouTube channel."
When we asked them what they felt the future of Spring Boot is for the Enterprise Java ecosystem, the team countered by offering that they felt the question should be more "what is the future of the Enterprise Java ecosystem?". They explained that:
The new PaaS era has arrived, which will rapidly sharpen the already flat to declining appserver market curve. Boot removes tedious boilerplate Java code for about 80% of cases, and encourages small, simply focused services that are ideal for cloud / PaaS deployments. Boot provides as much as possible out of the box for your app in production (metrics, JMX, CraSHd shell integration, easy security, etc.) so that getting the code right is the only responsibility you care about.
They went on to note that, "Java 8 has finally arrived, and Boot could easily become a rallying point for any JVM developer who wants the ease-of-use that they've seen/heard about with other languages and frameworks." From an Enterprise position, the team said that they'd seen "a lot of organizations developing small, extremely simple services today that are ideal for cloud / PaaS deployments, and Boot/Spring is the perfect BYOC (bring-your-own-container) strategy," though they mentioned that Boot can still "bridge to existing infrastructure, and full blown complex Enterprise Java - all the way back to JDK 6".
From the Spring Boot team's perspective, Boot is most ideal for applications that are designed as:
- a preferred buildpack for deploying apps to PaaS like CloudFoundry
- a preferred micro service / REST service development platform
- a rich, integrated backend for mobile application services
- a runtime for other JVM languages and frameworks (Groovy, perhaps Grails)
More details for developing Spring Boot applications as micro-services can be found in the article, Exploring Micro-frameworks: Spring Boot, which was published on InfoQ last month. Additional resources for developing applications with Spring and Spring Boot can be found under the Guides section of the Spring.io website.