《Spring in Action》第1章-开始使用Spring

开始使用Spring


1、构建一个Spring应用

使用Spring Initializr构建应用:

2、构建后的应用结构

在构建项目时我们选择以下的依赖:

生成的项目结构如下:

  • mvnw和mvnw.cmd是maven的打包脚本,及时我们没有安装maven,也可以用这个脚本来构建项目。
  • TacoCloudApplication.java是Spring Boot的主类,它会引导项目运行。

pom.xml中:

 <build>
    <plugins>
 	   <plugin>
 		   <groupId>org.springframework.boot</groupId>
 		   <artifactId>spring-boot-maven-plugin</artifactId>
 	   </plugin>
    </plugins>
 </build>

这是一个Spring Boot插件,它有一下几个重要功能:

  • 它提供了一个Maven目标:允许我们使用Maven运行项目

  • 它确保所有的依赖都被包含在可执行jar包中,且在运行时classpath中可用

  • 生成一个manifest文件,指定程序引导类(TacoCloudApplication.java)为可执行jar包的主类。

    如果没有加这个插件,构建的项目jar包目录结构如下:

    只有项目相关的代码和资源,没有依赖包,执行这个jar包包下面的错误:

    加上插件后的jar包目录结构:

    在BOOT-INF目录下,不仅有项目代码和资源,还有所有的依赖包:

3、程序引导类

 package tacos;

 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

 @SpringBootApplication
 public class TacoCloudApplication {

    public static void main(String[] args) {
 	   SpringApplication.run(TacoCloudApplication.class, args);
    }

 }

最简洁最重要的一行代码-@SpringBootApplication,这个注解是一个综合注解,它包含其它三个注解:

  • @SpringBootConfiguration:定义这个类为一个配置类,可以在这个类中编写基于java的配置代码。改注解是@Configuration的一个特殊形式。
  • @EnableAutoConfiguration:允许Spring Boot自动配置。
  • @ComponentScan:允许扫描组件。这将允许我们使用@Controller,@Service@Component等注解。

另一个重要的代码块-main方法:这是一个样板代码,在jar文件运行是,这个方法被调用。该方法调用了静态方法run,该方法完成真正的应用程序引导,创建Spring应用的上下文。该方法接收两个参数:一个是配置类,一个是命令行参数。虽然配置类不一定必须是引导类,但是将引导类传给run方法是一个非常方便且典型的选择。

4、处理Web请求

Spring MVC 是一个非常强大的Web框架,它的中心理念就是controller,controller类负责处理请求并返回数据。

一个简单的controller类:

 @Controller
 public class HomeController {

    @GetMapping("/")
    public String home(){
 	   return "home";
    }
 }
  • @Controller注解的主要作用就是声明该类为已个组件,以供容器自动扫描。@Component,@Service@Repository功能也一样,上面使用这3个注解效果一样,但是使用@Controller可以描述这个类在应用中的职责。
  • @GetMapping注解的home方法将处理根路径为"/"的HTTP GET请求。home方法返回一个字符串,这个字符串将会被解释为一个视图的逻辑名
  • 因为我们使用了Thymeleaf模板引擎,所以我们可以使用Thymeleaf来定义视图模板。模板的名字由逻辑名加上前缀/templates/和后缀.html派生而来,所以我们应该在/src/main/resources/templates中创建一个名为home.html的模板。

编写视图模板:

 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml"
 	 xmlns:th="http://www.thymeleaf.org">
 <head>
    <meta charset="UTF-8">
    <title>Taco Cloud</title>
 </head>
 <body>
    <h1>Welcom to</h1>
    <img th:src="@{/images/TacoCloud.jpg}">
 </body>
 </html>

<img/>标签中,使用了Thymeleaf的th:src元素和@{}表达式来引用图片。图片应该被放在/src/main/resources/static/images/目录下。

编写一个测试用例用来测试controller:

 import static org.hamcrest.Matchers.containsString;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.web.servlet.MockMvc;
 import tacos.controller.HomeController;

 @RunWith(SpringRunner.class)
 @WebMvcTest(HomeController.class) //HomeController的web测试
 public class ControllerTest {
    @Autowired
    private MockMvc mockMvc; //注入MockMvc
    @Test
    public void testHomePage() throws Exception{
 	   mockMvc.perform(get("/")) //执行HTTP GET 请求
 			   .andExpect(status().isOk()) //期望请求状态未200
 			   .andExpect(view().name("home"))//期望返回的视图名为home
 			   .andExpect(content().string(containsString("Welcome to ...")));//期待视图模板中包含Welcome to ... 字符串
    }
 }
  • @WebMvcTest:Spring Boot提供的注解,这个注解将测试放置在Spring MVC应用上下文中运行;上面的测试中,还将HomeController注册在Spring MVC中,这样我们才能对其进行请求。

我们运行这个测试类,如果所有的结果符合预期的话,测试通过,在idea中的图标可能是这样的:

5、Spring Boot DevTools

DevTools提供了非常方便的开发时工具:
* 当代码改变时,自动重启应用
* 当以浏览器为目标的资源改变时,自动刷新页面
* 自动关闭模板缓存
* 如果H2在用,内置H2控制台

在使用Intellij idea进行开发时,尽管依赖了DevTools,但是不起作用,此时需要对idea进行设置:File>settings>Build,Execution,Deployment>Compiler 下选中Build Project Automatically,然后Shift+Ctrl+Alt+/,选择Registry,选中compile.automake.when.app.running (参考自博客:https://blog.csdn.net/wjc475869/article/details/52442484)

  • 应用自动重启:

    当DevTools在项目中起作用时,应用将在JVM中被加载进两个独立的类加载器中。一个类加载器加载我们项目下/src/main/目录下的任何资源;另一个加载器加载项目的依赖包。当改变被探测到,DevTools只重新加载第一个类加载器并重启Spring应用上下文,另一个类加载器不会被重新加载。

  • 浏览器自动刷新和关闭模板缓存

    当我们修改了以浏览器为目标的资源后,只需要刷新页面便可看到改变。我们还可以为浏览器添加LiveReload插件,这样我们连刷新按钮都不用按(当DevTools起作用时,项目启动时会同时启动一个LiveReload服务)。

  • 内置H2控制台

    当我们在开发时使用H2数据库,DevTools会自动开启一个H2控制台,我们通过浏览器访问http://localhost:8080/h2-console来查看数据库的记录。

Spring.Boot.in.Action.2015.12.pdfFor online information and ordering of this and other manning books, please visit www.manning.com.thepublisheroffersdiscountsonthisbookwhenorderedinquantity For more information, please contact Special sales department Manning publications co 20 Baldwin Road PO BoX 761 Shelter island. ny11964 Emailorders@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 ll Recognizing the importance of preserving what has been written, it is Mannings 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. ny11964 Proofreader: Corbin Collins Technical p der John Guthrie Typesetter: Gordan Salinovic Cover designer: Marija Tudor ISBN9781617292545 Printed in the united states of america 12345678910-EBM-201918171615 contents reword vii pre eface 2x about this book xii acknowledgments xu Bootstarting Spring I 1. 1 Spring rebooted 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 3 Summary 22 Developing your first Spring Boot application 23 2.1 Putting spring boot to work 24 Examining a newly initialized spring boot project 26 Dissecting Bc iect build 30 2.2 USing starter dependencies 33 Specifying facet-based dependencies 34. Overriding starter transitive dependencies 35 CONTENTS 2.8 USing automatic configuration 37 Focusing on application functionality 37. Running the application 45. What just happened? 45 2.4 Summary 48 Customizing configuration 49 8.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-configuration55 8.2 Externalizing configuration with properties 57 Fine-tuning auto-configuration 58. Externally configuring application beans 64. Configuring with profiles 69 8.8 Customizing application error pages 71 3.4 Summary 74 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 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.8 Running tests with the CLI 102 5.4 Creating a deployable artifact 105 5.5 Summary 106 CONTENTS 6 Applying Grails in Spring Boot 107 1 Using gorm for data persistence 108 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 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 Ds 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 WaRfile 162 Creating a production profile Enabling database migration 168 8.3 Pushing to the cloud 173 Deploying to Cloud Foundry 173 Deploying to Heroku 177 8. Summary 180 appendix a spring Boot developer Tools 187 appendix b spring Boot starters 188 appendix c Configuration properties 195 appendix d spring boot dependencies 232 index 243 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 vm 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 FOREWORD Yet, when we embarked on our Spring boot journey solid documentation was hard to come by. Relying on source code isnt the most joyful manner of figuring out how to properly leverage a frameworks features It's not surprising to see the author of mannings 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 weve now come to expect from Craig and manning From chapter Is attention-getting introduction to Boot and the now legend ary 9Oish-character tweetable Boot application to an in-depth analysis of Boots 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 8s 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- o, I was pleasantly surprised with some of Springs testing features, and boot takes g 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 craigs 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. Craigs 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 JV ANDREW GLOVER MANAGER, DELIVERY ENGINEERING AT NETFLIX 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“ Carouse 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 Disneys 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 cant 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值