Welcome to the Ranch, Craig. First, let me introduce myself. I am a Software Developer and mostly my work is related to Java and specially Spring and associated projects. I have worked quite a lot on Spring XD and to an extent on Spring Batch and Integration.
My questions to you are:
1. How Spring Boot relates to the other technologies that I mentioned above, viz, Spring XD, Spring Batch, and Spring Integration and to a lesser extent to Spring's support to RESTful service?
2. What are some ideal use cases where Spring Boot is used?
3. My basic understanding of Spring Boot is that it provides a Bootstrapping mechanism for your Spring Applications. I have no further knowledge. Is this correct? If not, then what exactly are the capabilities of Spring Boot independent of any other Spring projects?
Spring Boot relates to all of those other technologies in the sense that it helps you use them in your project with less manual configuration on your part.
Put simply, Spring Boot offers 4 major features:
* Build-time starter dependencies (think Maven POM files with transitive deps, but no code of their own)
* An optional CLI for writing complete apps as nothing more than Groovy scripts
* The Actuator; a runtime insight into the inner workings and metrics of an app
IMO, the centerpiece of all of this is auto-configuration. Rather than write a lot of XML or Java-based configuration to satisfy Spring, Spring Boot auto-configuration makes intelligent decisions (at runtime...no code generation) to automatically configure components it thinks you need. For example, if you're building a web app, you'll likely add Spring MVC to your build and therefore it will be available in the classpath at runtime. Spring Boot will detect Spring MVC on the classpath at runtime and automatically configure everything you need for writing web apps with Spring MVC (including DispatcherServlet). All you need to do is start writing controllers. (And Spring MVC is just one example of auto-configuration.)
I prefer not to use the word "bootstrapping" because to me it implies code generation. Instead, I think of Spring Boot auto-configuration as an assistant in developing Spring apps. It handles the configuration so that I can focus on the app itself.
When should you use Spring Boot? Well, I think (and I believe most of the Spring team agrees) that it should be the foundation of any Spring project, especially new greenfield projects. Why would you want to do things the hard way with manually written/maintained configuration when Spring Boot can handle it for you?
My next question is more related to Spring XD and using Spring Boot to help me configure it. In current state, for Spring XD to work with your custom-modules, you need to create a Shaded jar or as it is called an 'Uber Jar' for any dependencies that are not provided by Spring XD on its own. The other option to configure your own Class-loader is tedious enough. Will Spring Boot help me with that? I am currently looking for a solution to resolve this as every new library that I add, I first need to verify whether it is already available in the Classpath and if not then include it in my jar. It becomes tedious with a distributed teams and multiple developers and needs lot of discipline and reviews to understand if a new library was added and configure it in the Uber jar.
Honestly, I'm not as well-versed in Spring XD as I should be, so I can't say for sure if Spring Boot will help with that (gut says yes, but I can't say with certainty).
What I do know is that Spring XD is being reimagined as Spring Cloud DataFlow. It will remain backward compatible with Spring XD, but will have some new stuff for developing those modules as microservices (not necessarily REST) in the cloud. The extension model for Spring Cloud DataFlow is essentially a tiny Spring Boot app, wrapped in an uber-JAR with just enough Spring Integration or Spring Batch config to do whatever the module is supposed to do.
That answer may not help you much with Spring XD...but I wanted to offer a glimpse into the future of Spring XD.
Yes, I am excited about Spring Cloud Data Flow. And hope it will overcome the issues that we currently have with Spring XD. It says that it is going to support maven dependencies, hope it is the same the way I understand it is.