SpringBoot其设计目的是简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配置。
在使用Spring Boot之前,我们需要搭建一个项目框架并配置各种第三方库的依赖,还需要在XML中配置很多内容。
Spring Boot 完全打破了我们之前的使用习惯,一分钟就可以创建一个Web开发的项目;通过 Starter 的方式轻松集成第三方的框架;去掉了XML的配置,全部用注解代替。
Spring Boot Starter 是用来简化jar包依赖的,集成一个框架只需要引入一个Starter,然后在属性文件中配置一些值,整个集成的过程就结束了。
●SpringBoot专注于快捷地方便开发单个个体微服务
●SpringCloud是关注全局的微服务协调整、治理框架
●SpringCloud 将Spring Boot开发的一个一个单体的微服务整合起来,从而给各个微服务之间提供(配置管理、服务发现、熔断器、路由、微代理、事件总线、全局锁、分布式会话等集成服务)。SpringBoot可以离开SpringCloud独立地进行开发项目,反之SpringCloud是离不开SpringBoot,是依赖的关系。
使用Maven创建父级工程,注意jdk版本选择 1.8+(包含 1.8),maven版本 3.5+(包含3.5),并删除父工程的其他无用的文件如(src、idea),留下pom.xml文件即可,如图 1.8 所示。
图 1.8
在父工程的pom文件配置坐标,统一管理jar包版本。
dependencyManagement描述:只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
如上述,pom文件中坐标描述。
●spring-cloud-dependencies:SpringCloud核心坐标
●mysql-connector-java:数据库驱动坐标
●druid:数据库连接池坐标
●mybatis-spring-boot-starter:mybatis的核心坐标
●junit:test测试坐标
●log4j:日志坐标
●lombok:自动生成get set方法
创建订单模块工程:选择父工程右击,创建订单模块工程如图 1.9 所示。
图 1.9
在模块工程cloud-provider-payment-8001 编写pom文件,代码如下所示。
如上述,pom文件中坐标描述如下所示:
●spring-boot-starter-web:web组件
●spring-boot-starter-actuator:actuator装配组件
●mybatis-spring-boot-starter:mybatis组件
●druid-spring-boot-starter:druid连接池组件
●mysql-connector-java:mysql数据库组件
●spring-boot-starter-jdbc:jdbc连接组件
●lombok:生成get set方法组件
●spring-boot-starter-test:test测试组件
配置application.yml文件,配置上对应的端口,服务名称,数据库的连接,mybaits的扫描,代码如下所示。
application.yml文件配置描述:
●server.port:指定对应的端口
●spring.application.name:指定服务名称
●spring.datasource.type:连接池的类型
●spring.datasource.driver-class-name:数据库驱动
●spring.datasource.url:链接地址
●spring.datasource.username:用户名
●spring.datasource.pass:密码
●mybatis.mapperLocations:扫描Mybatis的配置文件
●mybatis.type-aliases-package:扫描实体类
创建一个主启动类,并编写SpringBoot的入口,代码如下所示。
创建数据库表,SQL代码如下所示。
表字段描述:
●id 主键
●serial名称描述
实体类的编写:编写一个与数据库表字段映射的实体类,代码如下所示。
实体类注解描述:
●@Data 生成get set方法
●@AllArgsConstructor 生成全参数构造函数
●@NoArgsConstructor 生成无参数构造函数
编写封装json数据的实体类,代码如下所示。
实体类字段描述:
●id 主键
●serial名称描述
●T返回数据的类型
编写dao接口,并创建create添加方法,getPaymentById查询数据方法,代码如下所示。
mapper.xml映射数据库字段,并编写查询与添加的SQL语句,代码如下所示。
编写Servcie并引入PaymentDao对象在create方法中调用添加的方法,getPaymentById方法中调用查询的方法,代码如下所示。
编写Controller,并引入PaymentService对象,在create方法中调用=paymentSer vice.create添加方法,getPaymentById方法中调用payme ntService.get Pay mentById方法,代码如下所示。
测试查询:
在postman上测试执行http://localhost:8001/payment/getPaymentById/31,如图 1.10 所示。
图 1.10
在postman上测试执行http://localhost:8001/payment/create?serial=测试数据信息,如图 1.11 所示。
图 1.10
消费者订单模块:
选择父工程右击,创建消费者订单模块如图 1.12 所示。
图 1.11
进行配置POM.xml文件:
如上述,pom文件中坐标描述如下所示:
●spring-boot-starter-web web组件
●spring-boot-starter-actuator actuator装配组件
●mysql-connector-java mysql数据库组件
●lombok生成get set方法组件
●spring-boot-starter-test test测试组件
配置yml文件:
application.yml文件中进行配置端口,代码如下所示。
主启动类:
实体类的编写,编写一个与数据库表字段映射的实体类,代码如下所示。
实体类注解描述:
●@Data 生成get set方法
●@AllArgsConstructor 生成全参数构造函数
●@NoArgsConstructor 生成无参数构造函数
编写封装json数据的实体类,代码如下所示。
实体类字段描述:
●id 主键
●serial 名称描述
●T 返回数据的类型
创建config配置类,并在Spring中注入RestTemplate Bean对象,代码如下所示。
创建控制层类,定义一个成员变量PAYMENT_URL,用于调用 8001 接口请求地址,并引入RestTemplate对象。在create方法中调用restTemplate.postForObject并指定 8001 模块中的添加请求地址,在getPaymentById方法中调用restTempla te.get ForObject并指定 8001 模块中的查询请求地址,代码如下所示。
测试:
启动cloud-provider-payment-8001 与cloud-consumer-order80 工程,通过 80模块工程,调用 8001 模块工程。在浏览器上执行http://localhost/consumer/payment/getPaymentById/31 地址,如图1.13所示。
图 1.12
再次执行http://localhost/consumer/payment/create?serial=服务调用,如图1.14 所示。
图 1.13
本章讲解了微服务是什么,微服务的优秀缺点,还描述了比较主流的微服务解决方案并进行了分析。Spring Cloud为Java环境中解决微服务问题提供了非常完整的方案,所以在最近几年时间,Spring Cloud成了很多公司首选的技术方案。但是随着运用规模的扩大,Spring Cloud在服务治理领域的局限性逐步显露出来。相对来说,在服务治理方面,Dubbo有着非常大的优势,并且在Spring Cloud出现之前,它就已经被很多公司作为服务治理及微服务基础设施的首选框架。Dubbo Spring Cloud的出现,使得Dubbo既能够完全整合到Spring Cloud的技术线中,享受Spring Cloud生态中的技术支持和标准化输出,又能够弥补Spring Cloud中服务治理这方面的短板。Dubbo Spring Cloud是Spring Cloud Alibaba的核心组件,它构建在原生的SpringCloud标准之上,不仅覆盖了Spring Cloud原生特性,还提供了更加稳定和成熟的实现。
1. 描述什么是微服务?
2. 描述微服务处理了什么事情?
3. Dubbo 与SpringCloud的区别?
4. 微服务处理的方案是什么?