• SpringCloud环境搭建 --- Rest使用


    SpringCloud环境搭建 — Rest使用

    个人主页:https://blog.csdn.net/hello_list?type=blog

    今天来到SpringCloud的学习,我们从spring boot微服务阶段,学习到了用springboot去创建很多的微服务,但是这么多微服务我们如果去管理,以及相互之间的联系呢?

    而到了我们学习springcloud阶段,其实相对而言是变简单的,不需要写很多代码以及什么操作,主要就是接收思想,了解其中的机制,而springCloud项目基于springboot项目,只需要几行简单的配置即可开始使用;

    那来到了我们最熟悉的官网:https://spring.io/

    在这里插入图片描述

    进入spring cloud的学习,可以去读读这里的话,我读懂了,不告诉你

    在这里插入图片描述

    从springcloud的学习,我们可以看这张图,我们学习这里面几个部分

    在这里插入图片描述

    Rest环境搭建

    环境说明:jdk1.8,idea2019,maven3.6.X,springcloud最新版2021.0.3,mybatis-plus

    我们首先搭建一个父工程项目,创建一个空的普通的maven项目,我们直接把src目录删除掉,pom文件写下面的使用父工程管理依赖,这里都是与文章日期最新依赖。

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <junit.version>4.12junit.version>
        <log4j.version>1.2.17log4j.version>
        <lombok.version>1.18.24lombok.version>
        <springcloud-version>2021.0.3springcloud-version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${springcloud-version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>2.7.0version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>8.0.28version>
            dependency>
    
            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>1.2.11version>
            dependency>
    
    
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.0.5version>
            dependency>
            
            <dependency>
                <groupId>ch.qos.logbackgroupId>
                <artifactId>logback-coreartifactId>
                <version>1.2.3version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>${junit.version}version>
                <scope>testscope>
            dependency>
            <dependency>
                <groupId>log4jgroupId>
                <artifactId>log4jartifactId>
                <version>${log4j.version}version>
            dependency>
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>${lombok.version}version>
            dependency>
    
    
    
    
        dependencies>
    dependencyManagement>
    <build>
        
        <finalName>springcloudfinalName>
        <resources>
            <resource>
                <directory>src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-resources-pluginartifactId>
                <configuration>
                    
                    <delimiters>
                        <delimit>$delimit>
                    delimiters>
                configuration>
            plugin>
        plugins>
    build>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    有了父工程项目,我们再准备一个数据库环境,写一个api类,这里我们新建一个简单的账户表,往里面插入几条简单的数据

    DROP TABLE IF EXISTS `account`;
    CREATE TABLE `account` (
      `account_id` int(11) NOT NULL,
      `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
      `account_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
      PRIMARY KEY (`account_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    
    -- ----------------------------
    -- Records of account
    -- ----------------------------
    INSERT INTO `account` VALUES ('1', 'zhangsan', '333');
    INSERT INTO `account` VALUES ('2', 'lisi', '444');
    INSERT INTO `account` VALUES ('3', 'wangwu', '555');
    INSERT INTO `account` VALUES ('4', 'zhangliu', '666');
    INSERT INTO `account` VALUES ('5', 'qiqi', '777');
    INSERT INTO `account` VALUES ('6', 'baba', '888');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    新建一个maven普通项目起名叫springcloud-api,里面呢,放一个这样的实体类,与表的关系对应起来的一个简单对象,使用了lombok,这里大家可以自行去了解

    1、导入依赖

    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    我们可以看到这里如果正确会有一个小圆圈,如果你这里没有,那就要检查下父工程依赖了

    在这里插入图片描述

    2、编写配置,这里没有什么配置,所以就是滤过

    3、编写对应代码

    在这里插入图片描述

    provider-服务端提供者

    再新建一个maven普通项目模块,我们做服务的提供者

    1、导入依赖

    <dependencies>
        <dependency>
            <groupId>com.xuexigroupId>
            <artifactId>springcloud-apiartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
    
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
        dependency>
    
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-coreartifactId>
        dependency>
    
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-testartifactId>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    2、编写配置

    新建一个application.yml文件,内容如下:

    server:
      port: 8001
    
    spring:
      application:
        name: springcloud-provider-account
      datasource:
        driverClassName: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
        username: root
        password: 
        type: com.alibaba.druid.pool.DruidDataSource  #使用阿里的数据源
    
    # mybatis-plus配置日志
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      type-aliases-package: com.xuexi.pojo
      mapper-locations: classpath:mapper/*.xml
      global-config:
        db-config:
          table-underline: true  #实体类驼峰转下划线,默认就是
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3、编写代码,服务提供者我们只需要编写dao层和service层,这里使用了mybaits-plus所以比较简单,直接给大家截图

    dao层

    在这里插入图片描述

    service层

    在这里插入图片描述

    在这里插入图片描述

    这里我们可以编写一个controller进行下测试

    @RestController
    public class AccountController {
    
        @Autowired
        AccountService accountService;
    
        @PostMapping("/account/add")
        public boolean addAccount(Account account){
            return accountService.save(account);
        }
    
        @GetMapping("/account/get/{id}")
        public Account get(@PathVariable("id") long id){
            return accountService.getById(id);
        }
    
        @GetMapping("/account/list")
        public List<Account> getAll(){
            return accountService.list(null);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    测试成功
    在这里插入图片描述

    consumer-消费者

    同样的我们再建一个普通的maven子工程项目,我们进行服务的消费

    1、导入依赖

    <dependencies>
        <dependency>
            <groupId>com.xuexigroupId>
            <artifactId>springcloud-apiartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
        dependency>
    
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2、编写配置

    新建一个application.yml

    server:
      port: 80
    
    • 1
    • 2

    3、编写代码

    代码编写前,我们认识一个东西,就是我们的标题,REST这个东西,这里我觉得你学到这里应该很容易理解,所以我觉得还是先上代码吧

    首先编写一个config配置类,我们把RestTemplate这个对象接管到spring容器中

    @Configuration
    public class BeanConfig {
    
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    接着编写我们的消费代码,ConsumerController

    @RestController
    public class ConsumerController {
        private static final String REST_URL_PREFIX = "http://localhost:8001";
    
        @Autowired
        RestTemplate restTemplate;
    
        @PostMapping("/cousumer/add")
        public boolean addAccount(Account account) {
            return restTemplate.postForObject(REST_URL_PREFIX+"/account/add",account,boolean.class);
        }
    
        @GetMapping("/cousumer/get/{id}")
        public Account get(@PathVariable("id") long id) {
            return restTemplate.getForObject(REST_URL_PREFIX+"/account/get/"+id,Account.class);
        }
    
        @GetMapping("/cousumer/list")
        public List<Account> getAll() {
            return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class);
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    上面我都没有给大家说编写springboot启动类,别到这里还没启动呀,每一个项目下面,编写一个这样的启动类

    @SpringBootApplication
    public class Consumer_80 {
        public static void main(String[] args) {
            SpringApplication.run(Consumer_80.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我们启动下消费方,看下是否可以远程调用服务方服务,测试成功,远程调用了我们的服务消费掉

    在这里插入图片描述

    其实我们都学过网络请求,RestTemplate其实就是封装好的一个请求对象,然后可以通过get|post|delete|put请求,里面也没有多少方法,点以下就都出来了,这么简单,很容易看懂并学会吧!

    其实就像前后段分离,发送异步请求,通过不断地请求服务,然后去实现功能,一种直连的方式,对地址和端口请求服务

    在这里插入图片描述

    但是我们可以发现,这样是有缺点的,比如provider宕机了,consumer请求是请求不到了的,而且也不能做一些检测,负载均衡,轮询等方式;那我们接着学习再加一层
    下一篇我们尝试下使用Eureka注册中心,持续更新中·····

    赶紧点个关注吧,之后还会更新整个springcloud系列,关注不迷路,点个赞也行啊,bye~

  • 相关阅读:
    自动驾驶算法详解(7):特斯拉Tesla决策规划算法Planning解析上
    python使用apscheduler每隔一段时间自动化运行程序
    一篇讲解CPU性能指标提取及源码分析
    Linux系统编程详解
    Git入门
    大模型在数据分析场景下的能力评测
    iOS 组件化的创建 -创建 cocoapods 库
    Task Scheduler
    Debian11安装Proxmox VE 7
    javaEE进阶——SpringBoot与SpringMVC第一讲
  • 原文地址:https://blog.csdn.net/hello_list/article/details/126206113