springboot test_Spring Cloud之Spring Boot构建微服务

​引言:Spring Cloud 所有的服务构建都是基础Spring Boot进行快速搭建的,本章节带你快速了解Spring Boot的相关知识和配置。

1. Spring Boot快速入门

本章节会快速搭建一个Spring Boot的基础项目,并实现一个RESTFULL API。Spring Boot的特点简单,快速,我们只需要几行代码就可以提供一个RESTFULL API接口。

f94ded76-656c-4ac7-8a43-12b07c8c8dba
68bf289c-d206-4945-8dfe-3624e1e7b02e
b556f0ed-7c5f-4a07-9e20-11890e11db5b
4f3d5d0f-0630-4015-b148-ab6cd4582410

点击finish就建了一个基础的springboot工程,工程目录如下所示

b2faf42dad334d55b25bf6d49f65e499

Spring Boot的基础结构有三大块如上图所示

lsrc/main/java: 主程序入口DemoApplication, 可以通过直接运行该类来

启动Spring Boot应用。

130ea50f-6741-4073-947f-290b075de9ec
  • src/main/resources: 配置目录, 该目录用来存放应用的一些配置信息, 比如应用名、服务端口、数据库链接等。static目录与templates目录, 前者用于存放静态资源, 如图片、 css、JavaScript等;后者用千存放Web页面的模板文件。
  • src/test: 单元测试目录。

2. Maven配置分析

我们可以再pom.xml中看到生成了一些依赖如下所示。

<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASEcom.springbootfast demo 0.0.1-SNAPSHOTdemoDemo project for Spring Boot​ 1.8​ org.springframework.boot spring-boot-starter-web ​ org.springframework.boot spring-boot-starter-test test​ org.springframework.boot spring-boot-maven-plugin ​

我们之前构建web项目时,基本上都是需要把项目打成war包,然后在扔到Tomcat等web服务器上,才能运行,但是在spring boot中默认是直接讲项目打成jar包,这是因为默认的web模块内嵌了一个Tomcat,这使得jar本身具备了web服务的能力。

在项目依赖 dependencies配置中,包含了下面两项。

  • spring-boot-starter-web: 全栈Web开发模块,包含嵌入式Tomcat、 Spring MVC。
  • spring-boot-starter-test: 通用测试模块,包含JUnit、 Hamcrest、 Mockito。

这里需要注意,在Spring Boot的Starter POMS采用spring-boot-starter-*的命名方式,*号代表要引用的模块,如上所使用的web和test功能模块。

最后,在项目构建的build部分,引入spring-boot-maven-plugin插件,我们可以通过mvn spring-boot:run 名来来启动springboot。

3. 一个简单的RESTful API接口

首先我们新建一个package:com.springbootfast.demo.web,在web下新建HelloWordController控制类,内容如下:

package com.springbootfast.demo.web;​import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;​@RestControllerpublic class HelloWordController {​ @RequestMapping("/say") public String say(){ return "hello word"; }}

注意的:我本地的8080端口由于被占用了,因此我在application.properties修改了默认端口配置:

server.port=8088

现在来运行程序:

0aa4db66adab4c70ad2575e37e396ed4

打开浏览器输入:http://localhost:8088/say 会看到右 hello word 输出在页面。如下图:

aaad6a3b-ebab-4231-a3ac-1cb6c66fee44

其实启动spring boot的方式有很多种:

  • 作为java应用程序,我们可以直接运行main函数去运行它,上面我就是通过这种方式去运行的。
  • 前面我们已经提到了在pom.xml中加入了一个spring boot的maven插件,因此我们也可以通过mvn:spring-boot:run 命令去运行。
  • 还有一种就是在服务器上部署运行,需要我们先将应用打包成jar包,然后执行java -jar xxx.jar l来启动应用。
6fedd8cd981b42c2baca39f84c33c5bd

不做测试的程序员是不合格的程序员,在spring boot体系中如何做单元测试呢?

直接贴测试代码:

package com.springbootfast.demo;​import com.springbootfast.demo.web.HelloWordController;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.SpringApplicationConfiguration;import org.springframework.http.MediaType;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.web.WebAppConfiguration;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.setup.MockMvcBuilders;​import static org.hamcrest.Matchers.equalTo;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;​@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = DemoApplication.class)@WebAppConfigurationpublic class DemoApplicationTests {​ private MockMvc mvc;​ @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new HelloWordController()).build(); }​ @Test public void say() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/say") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect( content().string(equalTo("hello word"))); }}

运行say方法单元测试通过,如下图所示。

3d0c0cb8a9a440d39a827c5bda98a552

测试代码中的解析如下:

  • @RunWith(SpringJUnit4ClassRunner.class):引入JUnit4
  • @SpringApplicationConfiguration(classes = DemoApplication.class):指定启动类
  • @WebAppConfiguration:开启Web应用配置,用来模拟servletcontext
  • MockMvc对象:该对象是用来模拟对controller发起的请求,在say()方法中,perform函数用来发起一次请求,accept用来指定接收的数据类型,andExpect用来判断接口返会值是否和期望的一致。
  • @Before:从字面上也很好理解,就是执行@test的方法之前需要处理的事情,我们上述对模拟控制层的对象进行的一个初始化的操作,要不然,直接运行say(),会抛异常的。

4. 有关配置的详细说明

其实上边我已经遇到了一个配置上的问题,由于我自己电脑的上8080端口一直在占用着(具体原因因为工作需要),springboot启动默认又是8080端口,因此我开始启动的时候是没启动成功的,上述也提到了我把端口改到了8088上,就启动成功了。说到配置,相比大家应该都遇到过很繁琐的问题,就是可能会有多个环境,来回切换,配置需要复制了复制去,一不小气复制错了,还有可能会凉凉,小编之前都是根据环境变量去读配置的,我们一个系统因为工作需要,配置环境居然有十几个,看的头都炸了,就先撤到这里,接下来我们看看spring boot的配置是如何减轻我们的负担的。

在此之前,先说下YAML,它是一个可读性高,用来表达资料序列的格式,接下来我们都采用此方式来进行配置,原始的配置文件在这里就不多说了。

8165ce3dedf441b0bdb67228302792f6

上边就是我把默认端口8080改成了8088之后的配置。

如果我们想要在一个文件中配置两个环境的配置,该如何搞?看下图!!!

e2c039568bdb4475b0b12c9240f03e57

这里需要注意一下:通过YAML配置的不能通过@PropertySOurce注解去加载配置,不过,YAML将属性加载到内存中保存的时候是有序的。

命令行参数:比如我们通过 java -jar xxx.jar --server.port=6666 的方式可以指定端口去启动应用,这种方式和修改配置能起到一样的效果。

多环境配置:

我们知道有个默认的配置文件application.yaml,除此之外我们可以增加application-test.yaml,application-prod.yaml,application-dev.yaml,我们可以分别指定不同的端口以及不能环境的参数内容,可以通过spring.profiles.action来指定应用去使用哪一份配置文件,通过参数命令去触发:java -jar xxx.jar --spring.profiles.action=test。

Spring boot配置文件的加载顺序从上到下如下:

  • 命令行中传入的参数
  • SPRING_APPLICATION_JSON中的属性、
  • JAVA:comp/env中的JNDI属性
  • Java系统属性,通过System.getProperties()获得的
  • 操作系统的环境变量
  • 通过random.*配置的随机属性
  • 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容
  • 位于当前jar包之类,spring.profiles.action
  • 位于当前jar包之外的默认配置内容
  • 位于当前jar包之内的默认配置内容
  • @Configuration注解注释的类中,通过@PropertySource注解定义的属性
  • 在应用默认属性,使用SpringApplication.setDefaultProperties定义的内容

5. 监控和管理ACTUATOR

在pom.xml中添加spring-boot-starter-actuator依赖,然后重启应用。

d81675395f164b3ab54bd49bf2985bf5

我们可以访问上边的地址,获取对应的信息,比如/health

d17dd2d84d7648cdbcb0cd0df27da451

Spring boot监控端点包括三大类:

  • 应用配置类:获取应用程序中加载的应用配置、 环境变量、 自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  • 度最指标类:获取应用程序运行过程中用于监控的度量指标, 比如内存信息、 线程池信息、 HTTP请求统计等。
  • 操作控制类:提供了对应用的关闭等操作类功能

在这里就不做过多的讲解。关于spring boot的讲解在此就告一段落,后续会更新spring cloud的组件,希望持续关注。

0f0b8dd36b6b44919f002b7455d726fa
7896f44b85fa4682ad203767dd3bf185

看完了,记得收藏,空时就翻翻。

c68afe0420444ad78e5fd0b4ed7e4682
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值