在上一章节已经对微服务与 SpringCloud 做了介绍,为方便后面学习,下面以 Dept 部门模块为例做一个微服务通用 Demo —— Consumer 消费者(Client) 通过 REST 调用 Provider 提供者(Server)提供的服务,后续学习在该 Demo 基础上集成新功能。

环境

IDE:IDEA

SpringBoot 版本:1.5.20.RELEASE

SpringCloud 版本:Dalston.RELEASE

构建工具:Maven

开工

父工程构建

新建工程,打包方式为 pom ,工程名为 "microservicecloud" 依赖如下:

<?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>zze.springcloud</groupId><artifactId>microservicecloud</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version></properties><dependencyManagement><dependencies><!--Spring Cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--Spring Boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.20.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--Mysql Connector--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--DataSource--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.31</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency><!--log--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!--test--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency></dependencies></dependencyManagement>
</project>

pom.xml

下面新建的子工程的父工程都为 microservicecloud ,打包方式都为 jar。

公共子模块

新建名为 "microservicecloud-api" 的子工程,依赖如下:

<?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"><parent><artifactId>microservicecloud</artifactId><groupId>zze.springcloud</groupId><version>1.0-SNAPSHOT</version><relativePath>../microservicecloud/pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><description>封装整体的 entity 、接口、公共配置等</description><artifactId>microservicecloud-api</artifactId><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>

pom.xml

新建部门 Entity:

package zze.springcloud.entities;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class Dept implements Serializable {private Long deptNo; // 主键private String deptName; // 部门名称private String dbSource; // 来自哪个数据库,因为微服务架构中一个服务可以对应一个数据库,信息可被存储到不同数据库
}

zze.springcloud.entities.Dept

微服务Provider

新建名为 "microservicecloud-provider-dept-8001" 的子工程作为微服务提供者,依赖如下:

<?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"><parent><artifactId>microservicecloud</artifactId><groupId>zze.springcloud</groupId><version>1.0-SNAPSHOT</version><relativePath>../microservicecloud/pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><description>部门微服务提供者</description><artifactId>microservicecloud-provider-dept-8001</artifactId><dependencies><dependency><groupId>zze.springcloud</groupId> <!--引入自定义的 api 通用包,可以使用 Dept 部门 Entity--><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</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></dependency><!--修改后立即生效,热部署--><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>
</project>

pom.xml

初始化数据库表结构及数据:

DROP DATABASE IF EXISTS springcloud_8001;
CREATE DATABASE springcloud_8001 CHARACTER SET UTF8;
USE springcloud_8001;CREATE TABLE dept
(dept_no   BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,dept_name VARCHAR(60),db_source VARCHAR(60)
);INSERT INTO dept(dept_name, db_source)
VALUES ('开发部', DATABASE());
INSERT INTO dept(dept_name, db_source)
VALUES ('人事部', DATABASE());
INSERT INTO dept(dept_name, db_source)
VALUES ('财务部', DATABASE());
INSERT INTO dept(dept_name, db_source)
VALUES ('市场部', DATABASE());
INSERT INTO dept(dept_name, db_source)
VALUES ('运维部', DATABASE());SELECT * FROM dept;

dept.sql

配置数据源及 mybatis 相关,指定服务端口为 8001:

server:port: 8001mybatis:config-location: classpath:mybatis/mybatis.cfg.xml # mybatis 配置文件路径type-aliases-package: zze.springcloud.entities # 所有 Entity 别名类所在包mapper-locations:- classpath:mybatis/mapper/**/*.xml # mapper 映射文件

spring:application:name: microservicecloud-dept # 当前微服务名称
  datasource:type: com.alibaba.druid.pool.DruidDataSource # 数据源操作类型driver-class-name: org.gjt.mm.mysql.Driver # mysql 驱动包url: jdbc:mysql:///springcloud_8001 # 数据库连接 root
    username: rootpassword: rootdbcp2:min-idle: 5 # 数据库连接池的最小维持连接数initial-size: 5 # 初始化连接数max-total: 5 # 最大连接数max-wait-millis: 200 # 等待连接获取的最大超时时间

application.yml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="cacheEnabled" value="true"/> <!--二级缓存开启--><!--启用驼峰命名,表字段 user_name 可映射到 userName --><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
</configuration>

mybatis/mybatis.cfg.xml

编写部门 Dao:

package zze.springcloud.dao;import org.apache.ibatis.annotations.Mapper;
import zze.springcloud.entities.Dept;import java.util.List;@Mapper
public interface DeptDao {public boolean addDept(Dept dept);public Dept findById(Long id);public List<Dept> findAll();
}

zze.springcloud.dao.DeptDao

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="zze.springcloud.dao.DeptDao"><select id="findById" resultType="Dept" parameterType="Long">select dept_no,dept_name,db_source from dept where dept_no=#{deptNo};</select><select id="findAll" resultType="Dept">select dept_no,dept_name,db_source from dept;</select><select id="addDept" parameterType="Dept">insert into dept(dept_name,db_source) values(#{deptName},DATABASE());</select>
</mapper>

mybatis/mapper/DeptMapper.xml

编写部门 Service:

package zze.springcloud.service;import zze.springcloud.entities.Dept;import java.util.List;public interface DeptService {public boolean add(Dept dept);public Dept get(Long id);public List<Dept> list();
}

zze.springcloud.service.DeptService

package zze.springcloud.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import zze.springcloud.dao.DeptDao;
import zze.springcloud.entities.Dept;
import zze.springcloud.service.DeptService;import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {@Autowiredprivate DeptDao deptDao;@Overridepublic boolean add(Dept dept) {return deptDao.addDept(dept);}@Overridepublic Dept get(Long id) {return deptDao.findById(id);}@Overridepublic List<Dept> list() {return deptDao.findAll();}
}

zze.springcloud.service.impl.DeptServiceImpl

编写部门 Controller:

package zze.springcloud.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import zze.springcloud.entities.Dept;
import zze.springcloud.service.DeptService;import java.util.List;@RestController
@RequestMapping("/dept")
public class DeptController {@Autowiredprivate DeptService deptService;@PostMapping("/add")public boolean add(@RequestBody Dept dept) {return deptService.add(dept);}@GetMapping("/get/{id}")public Dept get(@PathVariable Long id) {return deptService.get(id);}@GetMapping("/list")public List<Dept> list() {return deptService.list();}
}

zze.springcloud.controller.DeptController

编写主启动类:

package zze.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application_8001 {public static void main(String[] args) {SpringApplication.run(Application_8001.class, args);}
}

zze.springcloud.Application_8001

测试:

运行主启动类,访问 http://localhost:8001/dept/list:

test

微服务Consumer

新建名为 "microservicecloud-consumer-dept-80" 的子工程作为微服务提供者,依赖如下:

<?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"><parent><artifactId>microservicecloud</artifactId><groupId>zze.springcloud</groupId><version>1.0-SNAPSHOT</version><relativePath>../microservicecloud/pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><description>部门微服务消费者</description><artifactId>microservicecloud-consumer-dept-80</artifactId><dependencies><dependency><groupId>zze.springcloud</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--修改后立即生效,热部署--><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>

pom.xml

指定服务端口为 80:

server:port: 80

application.yml

新建配置类,注册 RestTemplate bean:

package zze.springcloud.cfgbeans;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ConfigBean {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

zze.springcloud.cfgbeans.ConfigBean

新建 Controller,通过 RestTemplate bean 使用 Provider 提供的服务:

package zze.springcloud.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import zze.springcloud.entities.Dept;import java.util.List;@RestController
@RequestMapping("/consumer/dept")
public class DeptController {// 微服务 Provider 的服务地址private final static String REST_URL_PREFIX = "http://127.0.0.1:8001";@Autowiredprivate RestTemplate restTemplate;@PostMapping("/add")public boolean add(@RequestBody Dept dept) {return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept,Boolean.class);}@GetMapping("/get/{id}")public Dept get(@PathVariable Long id){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);}@GetMapping("/list")public List<Dept> list(){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);}
}

zze.springcloud.controller.DeptController

编写主启动类:

package zze.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application_80 {public static void main(String[] args) {SpringApplication.run(Application_80.class, args);}
}

zze.springcloud.Application_80

测试:

1、先启动部门微服务提供者即 microservicecloud-provider-dept-8001 工程。
2、再启动部门微服务消费者即 microservicecloud-consumer-dept-80 工程,访问 http://localhost/consumer/dept/list:

test

转载于:https://www.cnblogs.com/zze46/p/10662774.html

java框架之SpringCloud(2)-Rest微服务案例相关推荐

  1. 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)

    文章目录 SpringCloud 1. 认识微服务 1.1 单体架构 1.2 分布式架构 1.3 微服务 1.4 SpringCloud 1.5 总结 2. 服务拆分和远程调用 2.1 服务拆分原则 ...

  2. 从 Java 9 开始,Java 就华丽的转身为微服务了…

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  3. 联发科heli p90_“如果您是Java开发人员并且正在编写微服务,那么Helidon是一个不错的选择”

    联发科heli p90 " Helidon仅设计用于微服务" 尽管Oracle最近开放了 Helidon(一组Java库)的开源资源 ,但是该项目本身并不新鲜,正如Helidon项 ...

  4. JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署

    JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  5. 好未来晓黑板go-zero微服务框架: 你不需要懂微服务,懂业务就行

    go-zero 0. go-zero介绍 go-zero是一个集成了各种工程实践的web和rpc框架.通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验. go-zero 包含极简的 API ...

  6. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  7. redis 什么是冷数据_阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂

    前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及 ...

  8. springcloud Hystrix Dashboard微服务监控

    springcloud  Hystrix Dashboard微服务监控简介 Hystrix监控 除了隔离依赖服务的调用以外,Hystrix还提供了近实时的监控,Hystrix会实时.累加地记录所有关于 ...

  9. 从零开始学习微服务 -微服务基本概述、微服务案例

    1. SpringCloud概述 1.1 互联网应用架构 1.1.1 单体应用架构 在诞⽣之初,项目的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个To ...

最新文章

  1. 集成测试_渐增与非渐增模式优缺点
  2. 网络分层模型OSI和TCP/IP四层模型
  3. kerberos的故事2
  4. css选择指定class的元素
  5. Arcgis Javascript那些事儿(十二)——geometry service几何服务
  6. Oracle密码过期怎么办
  7. 2021上半年软考数据库系统工程师真题完整版
  8. 牛顿插值法在Matlab上的实现
  9. 单反相机参数之ISO/焦距篇
  10. Vue组件开发——异步组件
  11. 谈谈对计算机网络的了解,对计算机网络的认识和了解
  12. greenDAO简单使用经验
  13. 信息系统项目管理师思维导图
  14. zk kafka常识
  15. php pcntl_alarm,pcntl_alarm定时闹钟信号详解
  16. java第一部分学习笔记
  17. 微信旧岛小程序章节目录
  18. 初学Linux RHEL时遇到的系列问题和解决方案
  19. 问题 Q:巧克力与小花梨
  20. 此起彼伏 竞相盛放?!!

热门文章

  1. larvel nginx 配置
  2. 深度拷贝时,类中的非简单类型字段
  3. Fix Backup Database is terminating abnormally When performing a Farm Backup
  4. 11.find 查找并复制文件
  5. ZeroMq的研究和使用
  6. arm-arago-linux-gnueabi 下载,arm-arago-linux-gnueabi问题
  7. c语言node类型_高阶宏的妙用技法,C语言宏你所不知道的聪明技巧
  8. 计算机组成与结构r形式,计算机组成复习(自己整理的)
  9. 计算机科学与技术 军校,清华大学计算机科学与技术系
  10. PostgreSQL 12系统表(10)pg_locks