声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。

1、概念:Restful 基础架构

2、具体内容

对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清晰可见,创建一套新的微服务架构:部门微服务(Dept)。

如果要想进行 SpringCloud 开发,那么一定要对 SpringBoot 有一定的了解,同时本次也将融合 MyBatis 开发技术实现整体的微 服务的创建处理。

2.1、搭建项目环境

对于现在的项目创建一个:microcloud 的整体父 pom 项目,那么随后为了方便管理,将创建其三个子模块:

· microcloud-api 模块,作为公共的信息导入配置模块;

· microcloud-provider-dept-8001:作为服务提供者,该提供者负责使用 Mybatis 与数据库交互;

· microcloud-consumer-80:作为微服务调用的客户端使用。

1、 创建一个新的 maven 项目:microcloud;

2、 【microcloud】修改 pom.xml 文件,主要追加 springcloud 与 springboot 两个开发包的依赖关系;

注意:SpringCloud 中针对于依赖包的版本并不是像传统那样采用数字的形式定义的,而是使用了一系列的英国的地铁或城镇的名字来定义的。

<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>cn.study</groupId><artifactId>microcloud</artifactId><version>0.0.1</version><packaging>pom</packaging><name>microcloud</name><url>http://maven.apache.org</url><properties><jdk.version>1.8</jdk.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency>    <!-- 进行SpringCloud依赖包的导入处理 --><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><dependency>    <!-- SpringCloud离不开SpringBoot,所以必须要配置此依赖包 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.4.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>microcloud</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${jdk.version}</source><!-- 源代码使用的开发版本 --><target>${jdk.version}</target><!-- 需要生成的目标class文件的编译版本 --><encode>${project.build.sourceEncoding}</encode></configuration></plugin></plugins></build>
</project>

3、 【microcloud-api】建立一个 api 的公共模块,该模块的主要功能是提供有公共处理类,本次预计建立一个 Dept 数据表,里面 的字段:deptno(Long)、dname(String)、loc(保存的数据库的名字);

package cn.study.vo;import java.io.Serializable;@SuppressWarnings("serial")
public class Dept implements Serializable {private Long deptno ;private String dname ;private String loc ;public Long getDeptno() {return deptno;}public void setDeptno(Long deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}@Overridepublic String toString() {return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc+ "]";}
}

4、 创建一个 Rest 提供者的【microcloud-provider-dept-8001】项目模块,在这个模块里面主要定义要使用的数据库脚本:

DROP DATABASE IF EXISTS "study8001" ;
CREATE DATABASE study8001 CHARACTER SET UTF8 ;
USE study8001 ;
CREATE TABLE dept (deptno        BIGINT        AUTO_INCREMENT ,dname        VARCHAR(50) ,loc            VARCHAR(50) ,CONSTRAINT pk_deptno PRIMARY KEY(deptno)
) ;
INSERT INTO dept(dname,loc) VALUES ('开发部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('财务部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('市场部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('后勤部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('公关部',database()) ;

由于在整个微服务里面需要进行负载均衡的操作,所以本次在使用的时候加入了数据库的名称信息。

备注:

创建子模块【microcloud-api】【microcloud-provider-dept-8001】的步骤

在【microcloud】项目右键-new-other

2.2、创建 Dept 微服务

所谓的微服务的核心本质就是 JSON 的传输,那么既然现在要求使用 MyBatis 进行数据库操作,所以应该在项目里面配置 Druid 数据库连接池,而后对外进行项目的发布。

1、 【microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加相关的依赖程序支持包:

    <dependencies><dependency><groupId>cn.study</groupId><artifactId>microcloud-api</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

2、 【microcloud-provider-dept-8001】创建一个 IDeptDAO 数据操作接口,这个接口里面将提供有三个数据操作方法:

package cn.study.microcloud.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;import cn.study.vo.Dept;
@Mapper
public interface IDeptDAO {public boolean doCreate(Dept vo) ;public Dept findById(Long id) ;public List<Dept> findAll() ;
}

3、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,追加 mybatis 和服务的相关配置信息:

server:port: 8001
mybatis:config-location: classpath:mybatis/mybatis.cfg.xml    # mybatis配置文件所在路径type-aliases-package: cn.study.vo            # 定义所有操作类的别名所在包mapper-locations:                                     # 所有的mapper映射文件- classpath:mybatis/mapper/**/*.xml
spring:datasource:type: com.alibaba.druid.pool.DruidDataSource    # 配置当前要使用的数据源的操作类型driver-class-name: org.gjt.mm.mysql.Driver      # 配置MySQL的驱动程序类url: jdbc:mysql://localhost:3306/study8001           # 数据库连接地址username: root                                  # 数据库用户名password: mysqladmin                            # 数据库连接密码dbcp2:                                          # 进行数据库连接池的配置min-idle: 5                                   # 数据库连接池的最小维持连接数    initial-size: 5                               # 初始化提供的连接数max-total: 5                                  # 最大的连接数max-wait-millis: 200                          # 等待连接获取的最大超时时间

4、 【microcloud-provider-dept-8001】定义 src/main/resources/mybatis/mybatis.cfg.xml 配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 进行Mybatis的相应的环境的属性定义 --><settings>    <!-- 在本项目之中开启二级缓存 --><setting name="cacheEnabled" value="true"/></settings>
</configuration>

5、 【microcloud-provider-dept-8001】修改 src/main/resources/mybatis/mapper/cn/mldn/Dept.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.study.microcloud.dao.IDeptDAO"><select id="findById" resultType="Dept" parameterType="long">SELECT deptno,dname,loc FROM dept WHERE deptno=#{deptno} ;</select><select id="findAll" resultType="Dept">SELECT deptno,dname,loc FROM dept ;</select><insert id="doCreate" parameterType="Dept">INSERT INTO dept(dname,loc) VALUES (#{dname},database()) ;</insert>
</mapper> 

6、 【microcloud-provider-dept-8001】建立 IDeptService 接口,做业务实现:

package cn.study.microcloud.service;import java.util.List;import cn.study.vo.Dept;public interface IDeptService {public Dept get(long id) ;public boolean add(Dept dept) ;public List<Dept> list() ;
}

package cn.study.microcloud.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import cn.study.microcloud.dao.IDeptDAO;
import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;
@Service
public class DeptServiceImpl implements IDeptService {@Resourceprivate IDeptDAO deptDAO ;@Overridepublic Dept get(long id) {return this.deptDAO.findById(id);}@Overridepublic boolean add(Dept dept) {return this.deptDAO.doCreate(dept);}@Overridepublic List<Dept> list() {return this.deptDAO.findAll();}}

7、 【microcloud-provider-dept-8001】定义程序的运行主类

package cn.study.microcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Dept_8001_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);}
}

8、 【microcloud-provider-dept-8001】进行业务接口测试编写:

package cn.study.test;import static org.junit.Assert.fail;import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import cn.study.microcloud.Dept_8001_StartSpringCloudApplication;
import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;
@SpringBootTest(classes = Dept_8001_StartSpringCloudApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class IDeptServiceTest {@Resourceprivate IDeptService deptService ;@Testpublic void testGet() {System.out.println(this.deptService.get(1));}@Testpublic void testAdd() {Dept dept = new Dept() ;dept.setDname("测试部-" + System.currentTimeMillis());System.out.println(this.deptService.add(dept)); }@Testpublic void testList() {System.out.println(this.deptService.list());}}

9、 【microcloud-provider-dept-8001】建立Restful的DeptRest 服务类:

package cn.study.microcloud.rest;import javax.annotation.Resource;import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;@RestController
public class DeptRest {@Resourceprivate IDeptService deptService ;@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)public Object get(@PathVariable("id") long id) {return this.deptService.get(id) ;}@RequestMapping(value="/dept/add",method=RequestMethod.GET)public Object add(@RequestBody Dept dept) {return this.deptService.add(dept) ;}@RequestMapping(value="/dept/list",method=RequestMethod.GET)public Object list() {return this.deptService.list() ;}
}

10、 修改 hosts 配置文件,追加一个映射路径(路径:C:\Windows\System32\drivers\etc\hosts)。

127.0.0.1 dept-8001.com

11、 观察 Rest 服务能否正常提供:

· 调用 get 操作:dept-8001.com:8001/dept/get/1;

· 调用 list 操作:http://dept-8001.com:8001/dept/list;

2.3、客户端调用微服务

1、 创建一个 Maven 的新的模块:microcloud-consumer-80;

2、 【microcloud-consumer-80】修改 application.yml 配置文件:

server:port: 80

3、 【microcloud-consumer-80】创建一个 Rest 的配置程序类,主要进行 RestTemplate 类对象创建,这里很重要,编写这个类然后在控制器里面使用@Resource注解注入以后控制器就可以调用其他微服务了

package cn.study.microcloud.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestConfig {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate() ;}
}

4、 【microcloud-consumer-80】创建一个控制器,为了简化处理,本次不再进行页面定义了,所有服务结果都使用 Rest 返回;

package cn.study.microcloud.controller;import java.util.List;import javax.annotation.Resource;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import cn.study.vo.Dept;@RestController
public class ConsumerDeptController {public static final String DEPT_GET_URL = "http://dept-8001.com:8001/dept/get/";public static final String DEPT_LIST_URL = "http://dept-8001.com:8001/dept/list/";public static final String DEPT_ADD_URL = "http://dept-8001.com:8001/dept/add";//使用@Resource注解注入RestTemplate以后控制器就可以调用其他微服务了@Resourceprivate RestTemplate restTemplate;@RequestMapping(value = "/consumer/dept/get")public Object getDept(long id) {Dept dept = this.restTemplate.getForObject(DEPT_GET_URL + id,Dept.class);return dept;}@SuppressWarnings("unchecked")@RequestMapping(value = "/consumer/dept/list")public Object listDept() {List<Dept> allDepts = this.restTemplate.getForObject(DEPT_LIST_URL,List.class); return allDepts;}@RequestMapping(value = "/consumer/dept/add")public Object addDept(Dept dept) {Boolean flag = this.restTemplate.postForObject(DEPT_ADD_URL, dept,Boolean.class);return flag;}
}

5、 【microcloud-consumer-80】编写启动程序类

package cn.study.microcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Consumer_80_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Consumer_80_StartSpringCloudApplication.class,args);}
}

6、 修改 hosts 配置文件,追加访问控制路径:

127.0.0.1 client.com

7、 进行代码测试调用:

· 调用数据返回:http://client.com/consumer/dept/get?id=1;

· 测试列表数据:http://client.com/consumer/dept/list;

· 测试数据增加:http://client.com/consumer/dept/add?dname=WEB 测试

SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)...相关推荐

  1. vue.js项目实战运用篇之抖音视频APP-第二节:项目基础架构搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  2. SpringCloud 基础架构搭建

    SpringCloud 基础架构搭建 一.基础环境 (一)安装Redis (二)安装Nacos 访问地址:http://localhost:8848/nacos/#/login 出现以下界面,则安装成 ...

  3. 【项目】基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析

    [项目]基于SaaS的餐掌柜项目实战 文章目录 [项目]基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析 1.1 餐饮行业分析 1.2 餐饮 ...

  4. SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务

    对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确 的讲解,那么本次为 了清晰可见,创建一套新的微服务架构:部门微服务(De ...

  5. 戴尔XC系列超融合基础架构全新升级 进一步帮助用户提升效率与经济性

    客户往往想要大幅简化其基础架构,因此超融合基础架构已成为IT基础架构中增长最快的部分.据IDC数据显示,全球超融合系统市场在2016年仍然是广泛的融合基础架构市场中发展速度最快的细分市场,其在全球范围 ...

  6. C# 发送xml报文到用友U8生成凭证系列二(基础代码)

    C# 发送xml报文到用友U8生成凭证系列一(配置信息) C# 发送xml报文到用友U8生成凭证系列二(基础代码) C# 发送xml报文到用友U8生成凭证系列三(Modal代码) C# 发送xml报文 ...

  7. (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口

    文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...

  8. 短信系统后台基础版本搭建服务器环境和功能说明

    短信系统基础版本数据库搭建和后台功能介绍 短信系统后台基础版本搭建服务器环境和功能 此版本为短信系统基础版本 一:服务器环境篇 1.1:服务器操作系统 使用windows2016 或者是windows ...

  9. 谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

     导航: 谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客 目录 1.项目介绍 1.1 微服务架构图 1.2. 微服务划分图 2.项目环境搭建 2.1. 虚拟机搭建环境 ...

最新文章

  1. IE调试网页之一:F12 开发人员工具简介
  2. 只用静态图像,就能实时渲染出丝滑3D效果 | CVPR 2021 Oral
  3. HBase - 数据写入流程解析
  4. Java 拖拽文件到文本框
  5. .net框架、CLR和C#的版本之间的对应关系
  6. 一条nginx命令引发的对于容器的思考
  7. 如何将文件拷贝服务器上,如何将文件复制到云服务器上
  8. 《DSP using MATLAB》示例Example7.10
  9. Tensorflow学习笔记(三)
  10. 《季羡林先生》读书笔记-3
  11. Selenium-WebDriverApi介绍
  12. pytest源码_pytest文档60pytest.main()的使用
  13. Named Return Value Optimization (具名返回值优化)
  14. [knowledge][lisp] lisp与AI
  15. (转)C#中 DirectoryEntry组件应用实例
  16. 在html显示php代码,html跳转php只显示源代码
  17. android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
  18. Jenkins配置邮件, Extended E-mail Notification, 破解管理员密码
  19. 【程序员进阶之路】吴恩达Deeplearning.ai课程学习全体验:深度学习必备课程
  20. 计算机一级题库ps视频,2016年国家计算机一级Photoshop题库及答案

热门文章

  1. Redis复制(Replication)
  2. 学生如何提高专业英文阅读能力--施一公教授
  3. 稀疏表示介绍(中)、(下)
  4. 关于Mysql5.7高版本group by新特性报错
  5. 各路资本暗战智能家居
  6. 自己动手写一个印钞机 第二章
  7. 客户端用javascript填充Dropdownlist,服务器端获取不到Dropdownlist的值
  8. MapReduce之单词计数
  9. linux rar工具
  10. 分布式光伏发电并网无功补偿问题