SpringCloud 练习笔记.1 Rest环境搭建Provider

SpringCloud 练习笔记.1 Rest环境搭建Provider

参考【【狂神说Java】SpringCloud最新教程IDEA版】 https://www.bilibili.com/video/BV1jJ411S7xr?p=12&share_source=copy_web&vd_source=440449145e930227ff33dc2fd89e1495
笔记参考https://www.kuangstudy.com/bbs/1374942542566551554#header5

一个基于SpringCloud的练习笔记,个人学习记录

什么是微服务?

微服务是一种架构思想,将单一的应用程序划分为一组小的服务,每个服务运行在自己独立的进程中,服务之间使用轻量级的通信相互协调,独立部署到生产环境,同时根据不同的服务,分别负责不同的业务处理,使用合适有效的开发语言编写服务,使用不同的方式存储数据。

技术上也就是说,将原来的一体式架构项目,所有业务功能都在一个系统服务里处理的,根据业务拆分为多个独立的微小的服务,每个服务只做一件事,来进行解耦。

微服务

关注的是一个点,具体解决某个问题或处理什么业务的服务应用程序;

使用springboot开发的一个小模块,每个模块负责一件事一个业务处理,强调的是个体所完成的具体功能

微服务架构

是一种架构模式,将原来的一体式架构项目,所有业务功能都在一个系统服务里处理的,根据业务拆分为多个独立的微小的服务,每个服务只做一件事,来进行解耦,这样的一种架构的设计模式;

微服务的优缺点
优点
  1. 单一职责原则,一个模块只负责一个业务的处理,解耦合
  2. 服务足够小,代码容易理解,全部关注点在指定的需求功能上
  3. 能适应不同的开发语言,易于集成其他第三方技术依赖
  4. 每个微服务有自己独立的存储数据库,也可以使用统一的数据库
缺点:
  1. 系统的复杂性提高
  2. 服务间网络的通信问题
  3. 数据的一致性问题
  4. 性能和监控问题
微服务技术栈
微服务技术条目落地技术
服务开发SpringBoot、Spring、SpringMVC等
服务配置与管理Netfix公司的Archaius、阿里的Diamond等
服务注册与发现Eureka、Consul、Zookeeper等
服务调用Rest、PRC、gRPC
服务熔断器Hystrix、Envoy等
负载均衡Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具)Fegin等
消息队列Kafka、RabbitMQ、ActiveMQ等
服务配置中心管理SpringCloudConfig、Chef等
服务路由(API网关)Zuul等
服务监控Zabbix、Nagios、Metrics、Specatator等
全链路追踪Zipkin、Brave、Dapper等
数据流操作开发包SpringCloud Stream(封装与Redis,Rabbit,Kafka等发送接收消息)
时间消息总栈SpringCloud Bus
服务部署Docker、OpenStack、Kubernetes等
SpringCloud概述
Springboot和SpringCloud关系
  1. springboot是专注于单体的个体微服务
  2. SpringCloud是关注整个微服务协调治理的框架,将由springboot开发的一个个单体的微服务,进行整合管理,为服务之间提供:配置管理,服务发现,断路器,路由等集成服务
  3. SpringBoot是可以离开SpringCloud单独开发的,但是SpringCloud不能离开SpringBoot
SpringCloud五大组件
  1. 服务注册与发现–Eureka

  2. 负载均衡

    –客户端负载均衡–Netflix Ribbon

    –服务端负载均衡–Fegin(其实也是依赖Ribbon,将调用方式RestTemplete改为Service接口)

  3. 断路器–Hystrix

  4. 服务网关–Zuul

  5. 服务配置–Spring Cloud Config

使用RestTemplate便捷的访问远程HTTP服务的方式,简单的Restful服务模板

Rest环境搭建Provider

1.新建一个maven的父工程springcloud-ung ,将src删掉只留下pom文件管理
<?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.ung</groupId>
    <artifactId>springcloud-ung</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--打包方式  pom-->
    <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>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springCloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!--SpringBoot 启动器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!--日志测试~-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
2.新建一个api资源的模块 springcloud-api

注意,要将模块添加到springcloud-ung工程,并将springcloud-ung作为父工程
在这里插入图片描述

maven依赖

<?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>springcloud-ung</artifactId>
        <groupId>com.ung</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-api</artifactId>
    <!--当前的model需要的依赖,如果父工程有了,那就不用指定版本了-->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>
创建数据库表

db01 字符集 utf8 排序规则utf8_general_ci 数据库 和 dept 表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept`  (
  `deptno` bigint(11) NOT NULL AUTO_INCREMENT,
  `dname` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `db_source` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES (1, '开发部', 'db01');
INSERT INTO `dept` VALUES (2, '财务部', 'db01');
INSERT INTO `dept` VALUES (3, '市场部', 'db01');
INSERT INTO `dept` VALUES (4, '运维部', 'db01');
INSERT INTO `dept` VALUES (5, '人事部', 'db01');
INSERT INTO `dept` VALUES (6, '维修部', 'db01');

SET FOREIGN_KEY_CHECKS = 1;
3.在api模块里添加实体类Dept

在这里插入图片描述

package com.ung.springcloud.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @Author ung
 * @Description: 实体类
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@AllArgsConstructor
public class Dept implements Serializable {
    private Long deptno;
    private String dname;
    private String dbSource;

    public Dept(String dname) {
        this.dname = dname;
    }
}
新建springcloud-provider-dept-8001 模块,添加到父工程里

在这里插入图片描述

maven依赖

<?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>springcloud-ung</artifactId>
        <groupId>com.ung</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-provider-dept-8001</artifactId>

    <dependencies>
        <!--需要自己的api 模块-->
        <dependency>
            <groupId>com.ung</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</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>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-test</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-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>
配置文件

application.yml

server:
  port: 8001

mybatis:
  type-aliases-package: com.ung.springcloud.pojo
#  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
#  开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true

spring:
  application:
    name: springcloud-provider-dept-8001
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db01?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: root

mybatis-config.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>
        <!--二级缓存-->
        <settings>
            <setting name="cacheEnabled" value="true"/>
        </settings>
</configuration>

DeptMapper.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="com.ung.springcloud.dao.DeptDao">

    <insert id="addDept" parameterType="com.ung.springcloud.pojo.Dept">
        insert into dept(dname,db_source)
        values (#{dname},DATABASE())
    </insert>
    <select id="queryById" resultType="com.ung.springcloud.pojo.Dept">
        select * from dept
        where deptno = #{id}
    </select>
    <select id="queryAll" resultType="com.ung.springcloud.pojo.Dept">
        select * from dept
    </select>
</mapper>

DeptService

package com.ung.springcloud.service;

import com.ung.springcloud.pojo.Dept;

import java.util.List;

/**
 * @Author ung
 * @Description:
 */
public interface DeptService {
    boolean addDept(Dept dept);

    Dept queryById(Long id);

    public List<Dept> queryAll();
}

DeptDao

package com.ung.springcloud.dao;

import com.ung.springcloud.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author ung
 * @Description:
 */
@Mapper
@Repository
public interface DeptDao {

    boolean addDept(Dept dept);

    Dept queryById(Long id);

    public List<Dept> queryAll();
}

DeptController

package com.ung.springcloud.controller;

import com.ung.springcloud.pojo.Dept;
import com.ung.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author ung
 * @Description:
 */
@RestController
public class DeptController {

    private DeptService deptService;

    @Autowired
    public DeptController(DeptService deptService) {
        this.deptService = deptService;
    }


    @PostMapping("/dept/addDept")
    public boolean addDept(@RequestBody Dept dept) {
        return deptService.addDept(dept);
    }

    @GetMapping("/dept/queryById/{id}")
    public Dept queryById(@PathVariable Long id) {
        return deptService.queryById(id);
    }

    @GetMapping("/dept/list")
    public List<Dept> list() {
        return deptService.queryAll();
    }
}

DeptProvider_8001 启动类

package com.ung.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author ung
 * @Description:
 */
@SpringBootApplication
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}

启动启动类,访问链接 http://localhost:8001/dept/list ,可以看到有正确响应就是成功了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值