Statistics
59
Views
0
Downloads
0
Donations
Support
Share
Uploader

高宏飞

Shared on 2025-12-10

AuthorCraig Walls

The Spring Framework simplifies enterprise Java development, but it does require lots of tedious configuration work. Spring Boot radically streamlines spinning up a Spring application. You get automatic configuration and a model with established conventions for build-time and runtime dependencies. You also get a handy command-line interface you can use to write scripts in Groovy. Developers who use Spring Boot often say that they can't imagine going back to hand configuring their applications. Spring Boot in Action is a developer-focused guide to writing applications using Spring Boot. In it, you'll learn how to bypass configuration steps so you can focus on your application's behavior. Spring expert Craig Walls uses interesting and practical examples to teach you both how to use the default settings effectively and how to override and customize Spring Boot for your unique environment. Along the way, you'll pick up insights from Craig's years of Spring development experience.

Tags
No tags
ISBN: 1617292540
Publisher: Manning Publications
Publish Year: 2015
Language: 英文
Pages: 266
File Format: PDF
File Size: 6.9 MB
Support Statistics
¥.00 · 0times
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

M A N N I N G Craig Walls FOREWORD BY Andrew Glover IN ACTION www.it-ebooks.info
Spring Boot in Action CRAIG WALLS M A N N I N G Shelter Island Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 Email: orders@manning.com ©2016 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without the use of elemental chlorine. Manning Publications Co. Development editor: Cynthia Kane 20 Baldwin Road Technical development editor: Robert Casazza PO Box 761 Copyeditor: Andy Carroll Shelter Island, NY 11964 Proofreader: Corbin Collins Technical proofreader: John Guthrie Typesetter: Gordan Salinovic Cover designer: Marija Tudor ISBN 9781617292545 Printed in the United States of America 1 2 3 4 5 6 7 8 9 10 – EBM – 20 19 18 17 16 15 Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
iii contents foreword vii preface ix about this book xii acknowledgments xv 1 Bootstarting Spring 1 1.1 Spring rebooted 2 Taking a fresh look at Spring 2 ■ Examining Spring Boot essentials 4 ■ What Spring Boot isn’t 7 1.2 Getting started with Spring Boot 8 Installing the Spring Boot CLI 8 ■ Initializing a Spring Boot project with Spring Initializr 12 1.3 Summary 22 2 Developing your first Spring Boot application 23 2.1 Putting Spring Boot to work 24 Examining a newly initialized Spring Boot project 26 ■ Dissecting a Spring Boot project build 30 2.2 Using starter dependencies 33 Specifying facet-based dependencies 34 ■ Overriding starter transitive dependencies 35 Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
CONTENTSiv 2.3 Using automatic configuration 37 Focusing on application functionality 37 ■ Running the application 43 ■ What just happened? 45 2.4 Summary 48 3 Customizing configuration 49 3.1 Overriding Spring Boot auto-configuration 50 Securing the application 50 ■ Creating a custom security configuration 51 ■ Taking another peek under the covers of auto-configuration 55 3.2 Externalizing configuration with properties 57 Fine-tuning auto-configuration 58 ■ Externally configuring application beans 64 ■ Configuring with profiles 69 3.3 Customizing application error pages 71 3.4 Summary 74 4 Testing with Spring Boot 76 4.1 Integration testing auto-configuration 77 4.2 Testing web applications 79 Mocking Spring MVC 80 ■ Testing web security 83 4.3 Testing a running application 86 Starting the server on a random port 87 ■ Testing HTML pages with Selenium 88 4.4 Summary 90 5 Getting Groovy with the Spring Boot CLI 92 5.1 Developing a Spring Boot CLI application 93 Setting up the CLI project 93 ■ Eliminating code noise with Groovy 94 ■ What just happened? 98 5.2 Grabbing dependencies 100 Overriding default dependency versions 101 ■ Adding dependency repositories 102 5.3 Running tests with the CLI 102 5.4 Creating a deployable artifact 105 5.5 Summary 106 Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
CONTENTS v 6 ApplyingGrails in Spring Boot 107 6.1 Using GORM for data persistence 108 6.2 Defining views with Groovy Server Pages 113 6.3 Mixing Spring Boot with Grails 3 115 Creating a new Grails project 116 ■ Defining the domain 118 Writing a Grails controller 119 ■ Creating the view 120 6.4 Summary 123 7 Taking a peek inside with the Actuator 124 7.1 Exploring the Actuator’s endpoints 125 Viewing configuration details 126 ■ Tapping runtime metrics 133 Shutting down the application 139 ■ Fetching application information 140 7.2 Connecting to the Actuator remote shell 141 Viewing the autoconfig report 142 ■ Listing application beans 143 Watching application metrics 144 ■ Invoking Actuator endpoints 145 7.3 Monitoring your application with JMX 146 7.4 Customizing the Actuator 148 Changing endpoint IDs 148 ■ Enabling and disabling endpoints 149 Adding custom metrics and gauges 149 ■ Creating a custom trace repository 153 ■ Plugging in custom health indicators 155 7.5 Securing Actuator endpoints 156 7.6 Summary 159 8 Deploying Spring Boot applications 160 8.1 Weighing deployment options 161 8.2 Deploying to an application server 162 Building a WAR file 162 ■ Creating a production profile 164 Enabling database migration 168 8.3 Pushing to the cloud 173 Deploying to Cloud Foundry 173 ■ Deploying to Heroku 177 8.4 Summary 180 appendix A Spring Boot Developer Tools 181 appendix B Spring Boot starters 188 appendix C Configuration properties 195 appendix D Spring Boot dependencies 232 index 243 Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
vii foreword In the spring of 2014, the Delivery Engineering team at Netflix set out to achieve a lofty goal: enable end-to-end global continuous delivery via a software platform that facilitates both extensibility and resiliency. My team had previously built two different applications attempting to address Netflix’s delivery and deployment needs, but both were beginning to show the telltale signs of monolith-ness and neither met the goals of flexibility and resiliency. What’s more, the most stymieing effect of these monolithic applications was ultimately that we were unable to keep pace with our partner’s inno- vation. Users had begun to move around our tools rather than with them. It became apparent that if we wanted to provide real value to the company and rap- idly innovate, we needed to break up the monoliths into small, independent services that could be released at will. Embracing a microservice architecture gave us hope that we could also address the twin goals of flexibility and resiliency. But we needed to do it on a credible foundation where we could count on real concurrency, legitimate moni- toring, reliable and easy service discovery, and great runtime performance. With the JVM as our bedrock, we looked for a framework that would give us rapid velocity and steadfast operationalization out of the box. We zeroed in on Spring Boot. Spring Boot makes it effortless to create Spring-powered, production-ready ser- vices without a lot of code! Indeed, the fact that a simple Spring Boot Hello World application can fit into a tweet is a radical departure from what the same functionality required on the JVM only a few short years ago. Out-of-the-box nonfunctional features like security, metrics, health-checks, embedded servers, and externalized configura- tion made Boot an easy choice for us. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
FOREWORDviii Yet, when we embarked on our Spring Boot journey, solid documentation was hard to come by. Relying on source code isn’t the most joyful manner of figuring out how to properly leverage a framework’s features. It’s not surprising to see the author of Manning’s venerable Spring in Action take on the challenge of concisely distilling the core aspects of working with Spring Boot into another cogent book. Nor is it surprising that Craig and the Manning crew have done another tremendously wonderful job! Spring Boot in Action is an easily readable book, as we’ve now come to expect from Craig and Manning. From chapter 1’s attention-getting introduction to Boot and the now legend- ary 90ish-character tweetable Boot application to an in-depth analysis of Boot’s Actuator in chapter 7, which enables a host of auto-magical operational features required for any production application, Spring Boot in Action leaves no stone unturned. Indeed, for me, chapter 7’s deep dive into the Actuator answered some of the lingering questions I’ve had in the back of my head since picking up Boot well over a year ago. Chapter 8’s thor- ough examination of deployment options opened my eyes to the simplicity of Cloud Foundry for cloud deployments. One of my favorite chapters is chapter 4, where Craig explores the many powerful options for easily testing a Boot application. From the get- go, I was pleasantly surprised with some of Spring’s testing features, and Boot takes advantage of them nicely. As I’ve publicly stated before, Spring Boot is just the kind of framework the Java community has been seeking for over a decade. Its easy-to-use development features and out-of-the-box operationalization make Java development fun again. I’m pleased to report that Spring and Spring Boot are the foundation of Netflix’s new continuous delivery platform. What’s more, other teams at Netflix are following the same path because they too see the myriad benefits of Boot. It’s with equal parts excitement and passion that I absolutely endorse Craig’s book as the easy-to-digest and fun-to-read Spring Boot documentation the Java community has been waiting for since Boot took the community by storm. Craig’s accessible writ- ing style and sweeping analysis of Boot’s core features and functionality will surely leave readers with a solid grasp of Boot (along with a joyful sense of awe for it). Keep up the great work Craig, Manning Publications, and all the brilliant develop- ers who have made Spring Boot what it is today! Each one of you has ensured a bright future for the JVM. ANDREW GLOVER MANAGER, DELIVERY ENGINEERING AT NETFLIX Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
ix preface At the 1964 New York World’s Fair, Walt Disney introduced three groundbreaking attractions: “it’s a small world,” “Great Moments with Mr. Lincoln,” and the “Carousel of Progress.” All three of these attractions have since moved into Disneyland and Walt Disney World, and you can still see them today. My favorite of these is the Carousel of Progress. Supposedly, it was one of Walt Disney’s favorites too. It’s part ride and part stage show where the seating area rotates around a center area featuring four stages. Each stage tells the story of a family at different time periods of the 20th century—the early 1900s, the 1920s, the 1940s, and recent times—highlighting the technology advances in that time period. The story of innovation is told from a hand-cranked washing machine, to electric lighting and radio, to automatic dishwashers and television, to computers and voice-activated appliances. In every act, the father (who is also the narrator of the show) talks about the latest inventions and says “It can’t get any better,” only to discover that, in fact, it does get better in the next act as technology progresses. Although Spring doesn’t have quite as long a history as that displayed in the Car- ousel of Progress, I feel the same way about Spring as “Progress Dad” felt about the 20th century. Each and every Spring application seems to make the lives of developers so much better. Just looking at how Spring components are declared and wired together, we can see the following progression over the history of Spring: Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
PREFACEx ■ When Spring 1.0 hit the scene, it completely changed how we develop enter- prise Java applications. Spring dependency injection and declarative transac- tions meant no more tight coupling of components and no more heavyweight EJBs. It couldn’t get any better. ■ With Spring 2.0 we could use custom XML namespaces for configuration, mak- ing Spring itself even easier to use with smaller and easier to understand config- uration files. It couldn’t get any better. ■ Spring 2.5 gave us a much more elegant annotation-oriented dependency- injection model with the @Component and @Autowired annotations, as well as an annotation-oriented Spring MVC programming model. No more explicit declaration of application components, and no more subclassing one of sev- eral base controller classes. It couldn’t get any better. ■ Then with Spring 3.0 we were given a new Java-based configuration alternative to XML that was improved further in Spring 3.1 with a variety of @Enable-prefixed annotations. For the first time, it become realistic to write a complete Spring application with no XML configuration whatsoever. It couldn’t get any better. ■ Spring 4.0 unleashed support for conditional configuration, where runtime decisions would determine which configuration would be used and which would be ignored based on the application’s classpath, environment, and other factors. We no longer needed to write scripts to make those decisions at build time and pick which configuration should be included in the deployment. How could it possibly get any better? And then came Spring Boot. Even though with each release of Spring we thought it couldn’t possibly get any better, Spring Boot proved that there’s still a lot of magic left in Spring. In fact, I believe Spring Boot is the most significant and exciting thing to happen in Java development in a long time. Building upon previous advances in the Spring Framework, Spring Boot enables automatic configuration, making it possible for Spring to intelligently detect what kind of application you’re building and automatically configure the components nec- essary to support the application’s needs. There’s no need to write explicit configura- tion for common configuration scenarios; Spring will take care of it for you. Spring Boot starter dependencies make it even easier to select which build-time and runtime libraries to include in your application builds by aggregating commonly needed dependencies. Spring Boot starters not only keep the dependencies section of your build specifications shorter, they keep you from having to think too hard about the specific libraries and versions you need. Spring Boot’s command-line interface offers a compelling option for developing Spring applications in Groovy with minimal noise or ceremony common in Java appli- cations. With the Spring Boot CLI, there’s no need for accessor methods, access modi- fiers such as public or private, semicolons, or the return keyword. In many cases, you can even eliminate import statements. And because you run the application as scripts from the command line, you don’t need a build specification. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
PREFACE xi Spring Boot’s Actuator gives you insight into the inner workings of a running application. You can see exactly what beans are in the Spring application context, how Spring MVC controllers are mapped to paths, the configuration properties available to your application, and much more. With all of these wonderful features enabled by Spring Boot, it certainly can’t get any better! In this book, you’ll see how Spring Boot has indeed made Spring even better than it was before. We’ll look at auto-configuration, Spring Boot starters, the Spring Boot CLI, and the Actuator. And we’ll tinker with the latest version of Grails, which is based on Spring Boot. By the time we’re done, you’ll probably be thinking that Spring couldn’t get any better. If we’ve learned anything from Walt Disney’s Carousel of Progress, it’s that when we think things can’t get any better, they inevitably do get better. Already, the advances offered by Spring Boot are being leveraged to enable even greater advances. It’s hard to imagine Spring getting any better than it is now, but it certainly will. With Spring, there’s always a great big beautiful tomorrow. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
xii about this book Spring Boot aims to simplify Spring development. As such, Spring Boot’s reach stretches to touch everything that Spring touches. It’d be impossible to write a book that covers every single way that Spring Boot can be used, as doing so would involve cov- ering every single technology that Spring itself supports. Instead, Spring Boot in Action aims to distill Spring Boot into four main topics: auto-configuration, starter dependen- cies, the command-line interface, and the Actuator. Along the way, we’ll touch on a few Spring features as necessary, but the focus will be primarily on Spring Boot. Spring Boot in Action is for all Java developers. Although some background in Spring could be considered a prerequisite, Spring Boot has a way of making Spring more approachable even to those new to Spring. Nevertheless, because this book will be focused on Spring Boot and will not dive deeply into Spring itself, you may find it helpful to pair it with other Spring materials such as Spring in Action, Fourth Edition (Manning, 2014). Roadmap Spring Boot in Action is divided into seven chapters: ■ In chapter 1 you’ll be given an overview of Spring Boot, including the essentials of automatic configuration, starter dependencies, the command-line interface, and the Actuator. ■ Chapter 2 takes a deeper dive into Spring Boot, focusing on automatic configu- ration and starter dependencies. In this chapter, you’ll build a complete Spring application using very little explicit configuration. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
ABOUT THIS BOOK xiii ■ Chapter 3 picks up where chapter 2 leaves off, showing how you can influence automatic configuration by setting application properties or completely over- riding automatic configuration when it doesn’t meet your needs. ■ In chapter 4 we’ll look at how to write automated integration tests for Spring Boot applications. ■ In chapter 5 you’ll see how the Spring Boot CLI offers a compelling alternative to conventional Java development by enabling you to write complete applica- tions as a set of Groovy scripts that are run from the command line. ■ While we’re on the subject of Groovy, chapter 6 takes a look at Grails 3, the lat- est version of the Grails framework, which is now based on Spring Boot. ■ In chapter 7 you’ll see how to leverage Spring Boot’s Actuator to dig inside of a running application and see what makes it tick. You’ll see how to use Actuator web endpoints as well as a remote shell and JMX MBeans to peek at the internals of an application. ■ Chapter 8 wraps things up by discussing various options for deploying your Spring Boot application, including traditional application server deployment and cloud deployment. Code conventions and downloads There are many code examples throughout this book. These examples will always appear in a fixed-width code font like this. Any class name, method name, or XML fragment within the normal text of the book will appear in code font as well. Many of Spring’s classes and packages have exceptionally long (but expressive) names. Because of this, line-continuation markers (➥) may be included when necessary. Not all code examples in this book will be complete. Often I only show a method or two from a class to focus on a particular topic. Complete source code for the applications found in the book can be downloaded from the publisher’s website at www.manning.com/books/spring-boot-in-action. Author Online The purchase of Spring Boot in Action includes free access to a private web forum run by Manning Publications, where you can make comments about the book, ask techni- cal questions, and receive help from the author and from other users. To access the forum and subscribe to it, point your web browser to www.manning.com/books/ spring-boot-in-action. This page provides information on how to get on the forum once you are registered, what kind of help is available, and the rules of conduct on the forum. Manning’s commitment to our readers is to provide a venue where a meaningful dialogue between individual readers and between readers and the author can take place. It is not a commitment to any specific amount of participation on the part of the author whose contribution to the forum remains voluntary (and unpaid). We sug- gest you try asking the author some challenging questions lest his interest stray! Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
ABOUT THIS BOOKxiv The Author Online forum and the archives of previous discussions will be accessi- ble from the publisher’s website as long as the book is in print. About the cover illustration The figure on the cover of Spring Boot in Action is captioned “Habit of a Tartar in Kasan,” which is the capital city of the Republic of Tatarstan in Russia. The illustration is taken from Thomas Jefferys’ A Collection of the Dresses of Different Nations, Ancient and Modern (four volumes), London, published between 1757 and 1772. The title page states that these are hand-colored copperplate engravings, heightened with gum ara- bic. Thomas Jefferys (1719–1771) was called “Geographer to King George III.” He was an English cartographer who was the leading map supplier of his day. He engraved and printed maps for government and other official bodies and produced a wide range of commercial maps and atlases, especially of North America. His work as a mapmaker sparked an interest in local dress customs of the lands he surveyed and mapped, which are brilliantly displayed in this collection. Fascination with faraway lands and travel for pleasure were relatively new phenom- ena in the late eighteenth century, and collections such as this one were popular, introducing both the tourist as well as the armchair traveler to the inhabitants of other countries. The diversity of the drawings in Jefferys’ volumes speaks vividly of the uniqueness and individuality of the world’s nations some 200 years ago. Dress codes have changed since then, and the diversity by region and country, so rich at the time, has faded away. It is now often hard to tell the inhabitant of one continent from another. Perhaps, trying to view it optimistically, we have traded a cultural and visual diversity for a more varied personal life. Or a more varied and interesting intellectual and technical life. At a time when it is hard to tell one computer book from another, Manning cele- brates the inventiveness and initiative of the computer business with book covers based on the rich diversity of regional life of two centuries ago, brought back to life by Jeffreys’ pictures. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
xv acknowledgments This book will show how Spring Boot can automatically deal with the behind-the- scenes stuff that goes into an application, freeing you to focus on the tasks that make your application unique. In many ways, this is analogous to what went into making this book happen. There were so many other people taking care of making things happen that I was free to focus on writing the content of the book. For taking care of the behind-the-scenes work at Manning, I’d like to thank Cynthia Kane, Robert Casazza, Andy Carroll, Corbin Collins, Kevin Sullivan, Mary Piergies, Janet Vail, Ozren Harlo- vic, and Candace Gillhoolley. Writing tests help you know if your software is meeting its goals. Similarly, those who reviewed Spring Boot in Action while it was still being written gave me the feedback I needed to make sure that the book stayed on target. For this, my gratitude goes out to Aykut Acikel, Bachir Chihani, Eric Kramer, Francesco Persico, Furkan Kamaci, Gregor Zurowski, Mario Arias, Michael A. Angelo, Mykel Alvis, Norbert Kuchenmeis- ter, Phil Whiles, Raphael Villela, Sam Kreter, Travis Nelson, Wilfredo R. Ronsini Jr., and William Fly. Special thanks to John Guthrie for a final technical review shortly before the manuscript went into production. And extra special thanks to Andrew Glover for contributing the foreword to my book. Of course, this book wouldn’t be possible or even necessary without the incredible work done by the talented members of the Spring team. It’s amazing what you do, and I’m so excited to be part of a team that’s changing how software is developed. Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
ACKNOWLEDGMENTSxvi Many thanks to all of those involved in the No Fluff/Just Stuff tour, whether it be my fellow presenters or those who show up to hear us talk. The conversations we’ve had have in some small way contributed to how this book was formed. A book like this would not be possible without an alphabet to compose into words. So, just as in my previous book, I’d like to take this opportunity to thank the Phoeni- cians for the invention of the first alphabet. Last, but certainly not least...my love, devotion, and thanks go to my beautiful wife Raymie and my awesome girls, Maisy and Madi. Once again, you’ve tolerated another writing project. Now that it’s done, we should go to Disney World. Whatdya say? Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
1 Bootstarting Spring The Spring Framework has been around for over a decade and has found a place as the de facto standard framework for developing Java applications. With such a long and storied history, some might think that Spring has settled, resting on its laurels, and is not doing anything new or exciting. Some might even say that Spring is leg- acy and that it’s time to look elsewhere for innovation. Some would be wrong. There are many exciting new things taking place in the Spring ecosystem, including work in the areas of cloud computing, big data, schema-less data persis- tence, reactive programming, and client-side application development. Perhaps the most exciting, most head-turning, most game-changing new thing to come to Spring in the past year or so is 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 This chapter covers ■ How Spring Boot simplifies Spring application development ■ The essential features of Spring Boot ■ Setting up a Spring Boot workspace Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
2 CHAPTER 1 Bootstarting Spring focus on addressing your application’s functionality needs with minimal (or possibly no) thought of configuring Spring itself. In fact, one of the main things that Spring Boot does is to get Spring out of your way so you can get stuff done. Throughout the chapters in this book, we’ll explore various facets of Spring Boot development. But first, let’s take a high-level look at what Spring Boot has to offer. 1.1 Spring rebooted Spring started as a lightweight alternative to Java Enterprise Edition (JEE, or J2EE as it was known at the time). Rather than develop components as heavyweight Enterprise JavaBeans (EJBs), Spring offered a simpler approach to enterprise Java development, utilizing dependency injection and aspect-oriented programming to achieve the capa- bilities of EJB with plain old Java objects (POJOs). But while Spring was lightweight in terms of component code, it was heavyweight in terms of configuration. Initially, Spring was configured with XML (and lots of it). Spring 2.5 introduced annotation-based component-scanning, which eliminated a great deal of explicit XML configuration for an application’s own components. And Spring 3.0 introduced a Java-based configuration as a type-safe and refactorable option to XML. Even so, there was no escape from configuration. Enabling certain Spring features such as transaction management and Spring MVC required explicit configuration, either in XML or Java. Enabling third-party library features such as Thymeleaf-based web views required explicit configuration. Configuring servlets and filters (such as Spring’s DispatcherServlet) required explicit configuration in web.xml or in a serv- let initializer. Component-scanning reduced configuration and Java configuration made it less awkward, but Spring still required a lot of configuration. All of that configuration represents development friction. Any time spent writing configuration is time spent not writing application logic. The mental shift required to think about configuring a Spring feature distracts from solving the business problem. Like any framework, Spring does a lot for you, but it demands that you do a lot for it in return. Moreover, project dependency management is a thankless task. Deciding what libraries need to be part of the project build is tricky enough. But it’s even more chal- lenging to know which versions of those libraries will play well with others. As important as it is, dependency management is another form of friction. When you’re adding dependencies to your build, you’re not writing application code. Any incompatibilities that come from selecting the wrong versions of those dependencies can be a real productivity killer. Spring Boot has changed all of that. 1.1.1 Taking a fresh look at Spring Suppose you’re given the task of developing a very simple Hello World web applica- tion with Spring. What would you need to do? I can think of a handful of things you’d need at a bare minimum: Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info
3Spring rebooted ■ A project structure, complete with a Maven or Gradle build file including required dependencies. At the very least, you’ll need Spring MVC and the Serv- let API expressed as dependencies. ■ A web.xml file (or a WebApplicationInitializer implementation) that declares Spring’s DispatcherServlet. ■ A Spring configuration that enables Spring MVC. ■ A controller class that will respond to HTTP requests with “Hello World”. ■ A web application server, such as Tomcat, to deploy the application to. What’s most striking about this list is that 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 appli- cations need it, why should you have to provide it? Suppose for a moment that the controller is all you need. As it turns out, the Groovy-based controller class shown in listing 1.1 is a complete (even if simple) Spring application. @RestController class HelloController { @RequestMapping("/") def hello() { return "Hello World" } } There’s no configuration. No web.xml. No build specification. Not even an applica- tion server. This is the entire application. Spring Boot will handle the logistics of exe- cuting the application. You only need to bring the application code. Assuming that you have Spring Boot’s command-line interface (CLI) installed, you can run HelloController at the command line like this: $ spring run HelloController.groovy You may have also noticed that it wasn’t even necessary to compile the code. The Spring Boot CLI was able to run it from its uncompiled form. I chose to write this example controller in Groovy because the simplicity of the Groovy language presents well alongside the simplicity of Spring Boot. But Spring Boot doesn’t require that you use Groovy. In fact, much of the code we’ll write in this book will be in Java. But there’ll be some Groovy here and there, where appropriate. Feel free to look ahead to section 1.21 to see how to install the Spring Boot CLI, so that you can try out this little web application. But for now, we’ll look at the key pieces of Spring Boot to see how it changes Spring application development. Listing 1.1 A complete Groovy-based Spring application Licensed to Thomas Snead <n.ordickan@gmail.com>www.it-ebooks.info