勿忘初心

个人签名

530篇博客

微服务架构简介(6)—Spring

勿忘初心2018-12-21 14:45
1.9 示例项目(信用风险评估引擎)
在本书中,我们会以一个信用风险引擎的项目作为示例。我们不会花过多篇幅讲解信用风险评估的算法。我们会以2~3个评估风险是否可控的规则作为例子。这个应用程序的重点不在于风险评估是如何完成的,而在于我们应该如何设计微服务,如何保证安全性,以及各个微服务之间如何通信,等等。在我们的例子中,会使用Spring Boot作为我们的开发环境,部署微服务会用到Docker。


1.10 Spring
Spring是一个非常令人称奇的框架。不管是曾经用过Spring还是现在正在用Spring的Java程序员都会领略到Spring的便捷。如果你用Java但是还没有了解过Spring,那么真的应该停下来反思一下了。Spring是一个基于POJO(简单Java对象)的轻量级框架。Spring最大的特点是其依赖注入方式,在Spring中创建bean和对象的职责交给了Spring框架来统一管理、完成和维护。Spring鼓励使用模块化的方式进行编程。
AOP(面向切面编程)和事务管理是很多项目都需要的,这些在Spring框架提供的库中都已经内置好了。
在架构层面,Spring由一个核心容器和很多个其他的模块来搭配满足各种各样的需求。Spring核心容器包含了以下模块:
Spring代码模块;
Spring bean模块;
Spring上下文;
Spring Expression Language(SpEL)。
基于上面的这些核心模块,Spring还提供了很多其他的模块,用于构建健壮的基于Java的应用程序,如数据库访问模块、事务管理模块、安全模块、Spring集成模块、批处理模块、消息模块、社交插件、Spring Cloud等。有很多组件可以让开发变得更加简单高效。单说Spring
框架的好处,就可以写上一整本书,但是这并不是本书的目的。概括来讲,Spring的这些组件对于帮助Java程序员高效开发大有帮助。但是Spring有一个小的瑕疵就是其较为复杂的配置系统。平均一个应用程序可能需要用到超过4个Spring模块(如核心容器、Spring MVC事务管理、数据库访问等必不可少的模块),随着项目的发展,用到的模块数会更多,此时各个不同版本的组件之间的配置管理和兼容性就变
得十分麻烦了。为了帮助开发人员解决这个问题,Spring Boot就面世了。


1.11 Spring Boot
Spring Boot比Spring更适合快速启动和易于开发,它省略了很多累赘的Spring配置。Spring Boot不是另外一个独立的开发框架,它只是在Spring的基础上做了一些组件的封装,以降低开发的工作量。Spring Boot为很多样板代码、XML配置和注解节省了开发的工作量。Spring Boot可以很容易地与其他Spring模块集成,而且还为We b应用提供了一个内置的HTTP Web服务器。Spring Boot还有命令行界面。Spring Boot可以使用多种构建工具,如Maven和Gradle等。
使用 Spring Boot,一切都变得很简单
下面我们举个例子来证实我们前面对Spring Boot的赞美。这里我们开发一个只包含一个控制器类的小应用,这个控制器类可以根据用户在
URL中发过来的名字信息,向用户提供问候功能。需要为这个例子准备下面这些环境:
Java 8;
STS(Spring Tools Suite);
Maven。
在STS中创建一个新的Maven工程,命名为FirstBoot,然后将项目中的pom.xml文件修改成下面这样:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>firstboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- more dependency if required , like json converter -->
</project>


这里使用的spring-boot-starter-web依赖中封装了大量的其他依赖,包括Tomcat的We b服务器。在/src/main/java/com/sample/firstboot/controller目录下,创建一个名为SampleController.java的文件,这就是我们定义的控制器了,它将用来处理Tomcat接收到的HTTP请求。该文件的内容如下:
package com.sample.firstboot.controller;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
public class SampleController {
@RequestMapping("/greeting/{userName}")
String home(@PathVariable("userName") String userName) {
return "Welcome, "+userName +"!";
}
}


这就是一个简单的控制器类。这里的@RequestMapping注解用来标识方法可以处理的URL,这里这个方法能够处理的URL是/greeting/{username}。在接收到来自这个URL的请求时,控制器会返回Welcome加一个用户名。默认情况下处理的是HTTPGET方法。这是一个简单直接的控制器的例子。下一步,创建一个名为SampleApplication.java的文件,内容如下:
packagecom.sample.firstboot.controller;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.context.ApplicationContext;
@SpringBootApplication
public class SampleApplication {
public static void main(String[] args) {
ApplicationContextctx = SpringApplication.run(SampleApplication.class, args);
System.out.println("Application Ready to Start. Hit the browser.");
}
}


可以看到,这里使用的是一个@SpringBootApplication注解,而不是一大堆Spring框架下的注解组合,这里我们无须再添加诸如
@Configuration、@Component、@EnableAutoConfiguration之类的Spring注解。
接下来我们要运行这些代码,打开命令行窗口,然后进入应用程序所在的目录,然后敲入mvnspring-boot:run命令。这一命令会查找到包含
@SpringBootApplication注解的文件并运行这个应用程序。成功执行这个命令之后会有下面这样的日志输出在命令行中:Started
SampleApplicationin2.174secondsApplicationReadytoStart.
Hitthebrowser.
此时此刻,这个Spring Boot应用程序已经可以进行测试了。要测试这个应用程序,需要打开浏览器,然后敲入http://localhost:8080/greeting/john这个URL,这时应该能看到图1-4所示这样的页面。

这里的localhost地址指向的是用户的计算机,8080是Spring Boot中Tomcat启动的默认端口。/greeting/john是我们在控制器中定义的
URL的一部分。这里john这个名字可以任意替换,如xyz等。由此可见,使用Spring Boot开发应用程序是非常简单的。使用Spring Boot之后,开发人员无须再去关心复杂的配置和依赖,只用把精力集中在业务逻辑开发上,从而可以极大提升开发效率。


1.12 小结
在本章中,我们学习了微服务的概念,了解了微服务架构的一些特征。读者应该清楚使用微服务架构的好处和一些需要权衡的地方。在下一章中,我们会以一个示例项目,也就是前面提到的风险评估系统为例,介绍微服务架构的具体内容。这个示例系统会贯穿在本书的每一章中。示例风险评估系统会使用Spring Boot作为开发框架,使用Docker来进行部署。这些技术在本章中都有所提及。接下来我们该干什么了呢?下一章我们会围绕这个风险评估系统,将阐述怎么定义微服务和服务的发现。而且,我们还会使用Spring Boot开发我们的第一个微服务—用户注册服务。


原文网址:https://www.epubit.com/book/detail/27566
内容来源:异步社区;版权属【人民邮电出版社 异步社区】所有,转载已获得授权;未经授权,不得以任何方式复制和传播本书内容,如需转载请联系异步社区。