[微服务系列] 微服务构建框架--Spring Boot

一、微服务

作为微服务系列的第一篇文章,首先要了解一下微服务的概念。微服务是系统架构上的一种风格,主要是将原本单体的系统拆分为多个小型的服务,这些小型的服务在各自的进程中运行,每个服务之间的通信是基于HTTP的Restful API进行通信。每个服务都维护着各自的数据存储、业务开发、自动化测试案例等,但它们都是围绕着系统中某一项或者一些耦合度较高的业务功能进行构建。

二、 SpringBoot

SpringBoot是构建微服务的基础,因为其自动化配置、快速开发、轻松部署等一些特性都是非常适合作为微服务架构中各个微服务的框架。它的主要作用就是创建和启动基于Spring框架的项目,帮助开发人员容易的、迅速的创建出独立运行和产品级别的基于Spring的应用。SpringBoot具有以下特性:

  • 创建独立运行的基于Spring的项目
  • 直接嵌入Tomcat/Jetty服务器
  • 解决大量的配置问题,通过一系列Starter POMs,提供模块化的依赖管理工作
  • 提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
  • 供推荐的基础 POM 文件来简化 Apache Maven 配置

三、快速入门

1. 系统及工具版本要求
  • Java 1.7+
  • Maven 3.5+
  • Spring Framework 4.2.7+
  • eclipse/intellij
2. 项目搭建
  1. 选择SpringBoot项目

2. 自定义GroupID和ArtifactID

3. 选择Web下的web,方便之后构建Restful API 接口

4. 完成

5. 项目结构

3. 添加RESTFul API接口

在包com.shexd.springbootdemo.Controller;中添加如下代码

@RestControllerpublic class TestRestful {    

    @RequestMapping("/")    
    public String home(){        
        return "hello spring";
    }
}
4. 启动应用

启动Springboot有多种方式:

  • 将应用作为Java应用程序,直接使用main函数来启动
  • 因为应用使用Maven管理,并且应用中使用spring-boot-maven-plugin插件,所以,可以使用Maven的命令来启动应用,如下是应用在不同声明周期所用到的不同的maven命令
  • 将应用打包成Jar包,使用java -jar xxxx.jar命令来启动项目
5. 测试

测试分为两种方式:

  • 使用单元测试来测试接口
  • 使用网页直接访问
  • 使用postman接口测试工具来测试接口
  1. 了解以上的知识之后,我们使用main函数启动项目,然后访问localhost:8080/即可访问到主页。
  2. 使用单元测试进行测试,代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
//@SpringApplicationConfiguration(classes = SpringbootdemoApplication.class)
@SpringBootApplication
@WebAppConfiguration
public class SpringbootdemoApplicationTests {

    private MockMvc mvc;
    
    @Before
    public void  setUp(){
        mvc= MockMvcBuilders.standaloneSetup(new TestRestful()).build();
       }
    
    @Test
    public void  hello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/")
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(content().string(equalTo("hello spring")));
       }
}
4. 实时掌握应用的健康状况

在微服务中,我们是将单体应用拆分为多个小的服务进程,但是随着业务和微服务应用逐步增多,那么部署应用的数量也随之增多,使得传统的运维的复杂度大大提升。这时就需要一套自动化监控的机制来实时的监控应用的运行状态,并根据一些指标来完成相应的操作。 在springboot中,spring-boot-starter-actuator模块为应用提供了一系列的用于监控的端点。通过此模块,我们可以获取程序中加载的应用配置、环境变量、内存信息、线程池信息以及配置报告等内容。

1. 在pom中添加模块
<!--为应用提供监控端点-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. 配置健康监控的端口

通过配置此端口,可以和应用本身的端口区分开,如果不指定,则使用和server相同的端口

application.yml文件中设置如下:

management:
  port: 60000
  health:
    mail:
      enabled: false
3. 启动应用并查看健康状况

访问http://localhost:60000/beans,获取应用上下文创建的所有Bean

访问http://localhost:60000/mappings,返回所有Spring MVC的控制器映射关系报告

更多接口信息如下

该模块主要分为如下的三类及每个类对应的一些接口信息:

应用配置类:

HTTP方法

API

描述

GET

/autoconfig

获取应用自动化配置报告,包括自动化配置候选项

GET

/beans

获取应用上下文创建的所有Bean

GET

/configprops

获取配置的属性信息报告

GET

/env

获取所有可用的属性报告

GET

/env/{name}

查看具体变量的值

GET

/info

返回应用自定义的信息

度量指标类

HTTP方法

API

描述

GET

/metrics

返回当前应用的各类重要度量指标

GET

/metrics/{name}

查看具体指标

GET

/health

获取应用各类健康指标信息

GET

/dump

暴露程序运行中的线程信息

GET

/trace

返回基本的http跟踪信息

操作控制类

HTTP方法

API

描述

POST

/shutdonw

关闭应用

四、结束

此文主要是通过构建Springboot项目,实现了Restful接口,并添加监控信息,以对微服务的基本框架有个大概的轮廓。

原文发布于微信公众号 - 瞎说开发那些事(jsj201501)

原文发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cloudskyme

20个代码生成框架

1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:...

6194
来自专栏全华班

开源免费的Java多人博客系统

5. 重新定义了Group概念, 即内容分组, 不再有原来复杂的模板定制等, 去除了原有的视频和问答定制, 可以在Group里面自行扩展

261
来自专栏张戈的专栏

原创插件:中国博客联盟WordPress插件更新至1.2.2版本

这个周末,作为 PHP 菜鸟的张戈再次爆发,天昏地暗的开发了 3 个插件: ①、Zgboke-Nav:中国博客联盟导航插件更新至 Ver 1.22 ②、WP-B...

2674
来自专栏Java Edge

使用 Spring Social 开发第三方登录简介开发 QQ 登录(上)开发 QQ 登录(中)

28512
来自专栏developerHaoz 的安卓之旅

Android 解锁 Gradle 依赖新姿势

相信现在大部分人都在使用 Gradle 来进行依赖管理,不得不说,Gradle 真的相当简洁、好用,举个例子,如果我们想依赖 okhttp,直接

824
来自专栏Golang语言社区

在 Golang 项目中使用 Spring Cloud Config Server 管理配置

最近用 Go 写后端写得很开心,写篇比较实用的博客总结下如何通过 Spring Cloud Config Server 管理 Go 程序中的配置。 实现并不复杂...

1123
来自专栏葡萄城控件技术团队

自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC...

7027
来自专栏Young Dreamer

前端自动化测试漫长路之——Selenium初探

引言 最近想解决前端开发或测试中的两个问题:一是界面UI的布局适配,能否在测试的过程中,通过命令操作真机打开相应页面然后截屏,通过对图片识别分类,发现有问题的图...

2027
来自专栏企鹅号快讯

超全的 Linux 机器的渗透测试命令备忘表

协作翻译 原文:Most Important Penetration Testing commands Cheat Sheet for Linux Machin...

1798
来自专栏java学习

针对java初学者以及自学者的一篇入门教程

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 最新通知 按照我去培训机构的学习经历,给初学还有自学Java 的同学一个基本的学习...

4019

扫码关注云+社区