Last modified: April 10, 2017
Spring Boot is a Spring solution for creating stand-alone Spring apps quickly. It greatly reduces the configuration needed with a traditional Spring project and generates jar files that you can "just run".
Spring Boot embeds Tomcat or Jetty instances directly within projects. This means developers no longer need to worry about deploying a war file to a separate standalone server instance. Spring Boot also doesn't require any xml configuration or generate any code. This greatly reduces development time through an "opinionated" and convention over configuration based approach to app deployment.
How does Spring Boot compare to Node.js? While it's arguably parallel to Node in deployment efficiency, a greater discrepancy exists in the performance realm. Node.js claims to be single threaded, meaning all I/O runs through a single event loop. It's argued that this is faster than multi-threaded engines because all blocking I/O is thrown off to "asynchronous" operations while the main loop keeps running. In this way, the CPU avoids the overhead of switching threads.
This is misleading because these "asynchronous" operations are actually separate threads running on the same CPU. Since Spring Boot is running on JVM, it's multi-threaded by nature. It's arguably more performant, but that discussion is for another time.
The choice to use one over the other boils down to a few major questions. They are:
Although Spring Boot makes app deployment much faster, it requires Java experience. If you have a web facing project that requires front end work, it may be harder to find someone that can work well in a Java environment. If you are are an enterprise level company with a team of experienced Java developers, then using Spring Boot could be equally as efficient.
Node's package manager also poses security threats. Malicious developers can easily infiltrate the vast hierarchal dependency tree of npm modules in npm's central registry. This makes it more prone to security threats than maven or gradle which use a flat dependency tree to build out project dependencies.