IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spring Cloud-超详细讲解Rest环境搭建 -> 正文阅读

[大数据]Spring Cloud-超详细讲解Rest环境搭建

目录

前言

1、数据库准备

2、创建Maven父项目,并编写pom.xml

3、建立子Module

4、配置springcloud-api

5、配置springcloud-provider-blog-8001

4、配置springcloud-consumer-blog-80

5、测试REST搭建环境

6、复盘全局

小结


【一心同学】正在参加【博客之星】

希望各位大佬能够投【五星】? ? ? ? ?给予【一心同学】,每一份投票都是【一心同学】的动力。

【一心同学】投票专区入口:https://bbs.csdn.net/topics/603956556?

想要学到更多后端知识,欢迎关注【一心同学】

??????感谢各位大可爱小可爱!???????


前言

我们知道Spring Cloud是基于HTTP的REST方式调用的,然而听概念只是感觉很抽象,本篇博客将由【一心同学】带领大家进行基于Spring Clou的Rest环境的搭建,更加了解Spring Cloud的特性。

1、数据库准备

CREATE DATABASE mydb1;

USE mydb1;

DROP TABLE IF EXISTS `blog`;

CREATE TABLE `blog` (
 `id` int NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 `db_source` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

insert into `blog`(`id`,`name`,`db_source`) values (1,'一心同学','mydb1'),(2,'张三','mydb1');

2、创建Maven父项目,并编写pom.xml

(1)配置打包方式?

<!--打包方式 pom-->
<packaging>pom</packaging>

(2)版本号和依赖管理

<!--版本号统一管理-->
 <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.13.2</junit.version>
 <log4j.version>1.2.17</log4j.version>
 <lombok.version>1.18.20</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>Hoxton.SR12</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>

 <!--SpringBoot-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-dependencies</artifactId>
 <version>2.3.12.RELEASE</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>

 <!--数据库-->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.25</version>
 </dependency>

 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid</artifactId>
 <version>1.1.10</version>
 </dependency>

 <!--SpringBoot 启动器-->
 <!-- mybatis 启动器,版本至关重要-->
 <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>

(3)注意事项

spring-cloud-dependencies这个依赖的版本要与Spring Boot的版本相对应!

步骤一:进入Spring Cloud官网:Spring Cloud

步骤二:点击LEARN,并选择相应的Spring Cloud依赖

步骤三:进入 Reference Doc.

可以发现我选的这个Spring Cloud依赖是:Hoxtom.SR12,其对应的Spring Boot版本需要2.3.12.RELEASE及以上的。

(4) 完整的父项目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>org.yixin</groupId>
 <artifactId>SpringCloud</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.13.2</junit.version>
 <log4j.version>1.2.17</log4j.version>
 <lombok.version>1.18.20</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>Hoxton.SR12</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>

 <!--SpringBoot-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-dependencies</artifactId>
 <version>2.3.12.RELEASE</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>

 <!--数据库-->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.25</version>
 </dependency>

 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid</artifactId>
 <version>1.1.10</version>
 </dependency>

 <!--SpringBoot 启动器-->
 <!-- mybatis 启动器,版本至关重要-->
 <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>

3、建立子Module

注:同样以Maven形式创建。

(1)添加Module

(2)? 建立三个Maven子项目,目录如下

4、配置springcloud-api

我们把实体类放在springcloud-api中。

(1)导入依赖

可以发现,由于父项目中以及管理了lombok这个jar包指定了版本号,所以我们这里无需再指定版本号了。

<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
</dependency>

(2)建立以下目录

(3)编写实体类Blog

package com.yixin.springcloud.pojo;

import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@NoArgsConstructor
//所有的实体类必须实现序列化接口
public class Blog implements Serializable {

 private Integer id;
 private String name;
 private String db_source;//这个数据是存在哪个数据库的字段
 //微服务架构:一个服务对应一个数据库,也就是说同一个信息会存到不同的数据库,因此需要 db_source 进行区分
}

5、配置springcloud-provider-blog-8001

springcloud-provider-blog-8001:是我们的服务提供方。

(1)导入依赖

<dependencies>

 <!--导入我们刚刚写的springclou-api,这样我们才可以调用到里面的实体类Blog-->
 <dependency>
 <groupId>org.yixin</groupId>
 <artifactId>springcloud-api</artifactId>
 <version>1.0-SNAPSHOT</version>
 </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>

 <!--test-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-test</artifactId>
 <version>2.4.5</version>
 </dependency>

 <!--注意这里的Spring Boot版本要与Spring Cloud的版本相匹配!-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <version>2.4.5</version>
 </dependency>

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jetty</artifactId>
 <version>2.5.2</version>
 </dependency>
 <!--热部署-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <version>2.4.5</version>
 </dependency>
 </dependencies>

(2)建立以下目录

(3)编写BlogDao接口

package com.yixin.springcloud.dao;

import com.yixin.springcloud.pojo.Blog;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;

@Mapper
@Repository
public interface BlogDao {

 boolean addBlog(Blog blog);
 Blog queryById(Integer id);//根据id查找Blog
 List<Blog> queryAll();

}

(4)编写application.yml

我们将其端口号设置为:8001

server:
  port: 8001
mybatis:
  type-aliases-package: com.yixin.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

(5)编写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>

(6)编写BlogMapper.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.yixin.springcloud.dao.BlogDao">

 <insert id="addBlog" parameterType="Blog">
 insert into blog (name,db_source) values (#{name},DATABASE());
 </insert>

 <select id="queryById" resultType="Blog" parameterType="java.lang.Integer">
 select * from blog where id=#{id};
 </select>

 <select id="queryAll" resultType="Blog">
 select * from blog;
 </select>

</mapper>

(7)编写接口BlogService

package com.yixin.springcloud.service;

import com.yixin.springcloud.pojo.Blog;
import java.util.List;

public interface BlogService {
 boolean addBlog(Blog blog);
 Blog queryById(Integer id);
 List<Blog> queryAll();
}

(8)编写实现类BlogServiceImpl

package com.yixin.springcloud.service;

import com.yixin.springcloud.dao.BlogDao;
import com.yixin.springcloud.pojo.Blog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class BlogServiceImpl implements BlogService{

 @Autowired
 private BlogDao blogDao;

 @Override
 public boolean addBlog(Blog blog) {
 return blogDao.addBlog(blog);
 }

 @Override
 public Blog queryById(Integer id) {
 return blogDao.queryById(id);
 }

 @Override
 public List<Blog> queryAll() {
 return blogDao.queryAll();
 }

}

(9)编写BlogController

package com.yixin.springcloud.controller;


import com.yixin.springcloud.pojo.Blog;
import com.yixin.springcloud.service.BlogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;


@RestController
public class BlogController {

 @Autowired
 private BlogService blogService;

 @PostMapping("/blog/add")
 public boolean addBlog(Blog blog){
 return blogService.addBlog(blog);
 }

 @GetMapping("/blog/get/{id}")
 public Blog get(@PathVariable("id") Integer id){
 return blogService.queryById(id);
 }

 @GetMapping("/blog/list")
 public List<Blog> queryAll(){
 return blogService.queryAll();
 }

}

注意:我们【提交】请求一般实用Post,因为使用GET进行提交不安全,而获取就可以使用【GET】。

(10)编写启动类BlogProvider_8001

Tip:其实可以发现我们这个子项目其实就是我们自己手写搭建的Spring Boot项目

package com.yixin.springcloud;

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

@SpringBootApplication
public class BlogProvider_8001 {
 public static void main(String[] args) {

 SpringApplication.run(BlogProvider_8001.class,args);
 }
}

(11)启动项目,进行测试

访问:http://localhost:8001/blog/list

注意:端口号是8001

测试成功!

4、配置springcloud-consumer-blog-80

(1)导入依赖

<dependencies>

 <!--导入我们刚刚写的springclou-api,这样我们才可以调用到里面的实体类Blog-->
 <dependency>
 <groupId>org.yixin</groupId>
 <artifactId>springcloud-api</artifactId>
 <version>1.0-SNAPSHOT</version>
 </dependency>

 <!--注意这里的Spring Boot版本要与Spring Cloud的版本相匹配!-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <version>2.4.5</version>
 </dependency>

 <!--热部署-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <version>2.4.5</version>
 </dependency>

 </dependencies>

(2)创建以下目录

(3)编写application.yml

设置端口号为:8000

server:
  port: 8000

(4)编写配置类ConfigBean

a、由于Spring Cloud是基于HTTP的REST方式进行调用,所以我们这里需要使用到一个类RestTemplate,其可以提供多种便捷访问远程http服务的方法,简单的Restful服务模板。

b、但是RestTemplate并没有注入到Spring中,所以才需要我们自己编写配置类注册到Spring中

package com.yixin.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ConfigBean{

 @Bean
 public RestTemplate getRestTemplate(){
 return new RestTemplate();
 }
}

(5)编写BlogConsumerController控制类

注意:我们这个springcloud-consumer-blog-80是一个消费者项目,所以不存在service和dao,该项目只需要进行调用请求即可

package com.yixin.springcloud.controller;

import com.yixin.springcloud.pojo.Blog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;

@RestController
public class BlogConsumerController {

 @Autowired
 private RestTemplate restTemplate;

 /**
 * 服务提供方地址前缀
 */
 private static final String REST_URL_PREFIX="http://localhost:8001";


 /**
 * 消费方根据博客Blog的id进行查询博客
 */
 @GetMapping("/consumer/blog/get/{id}")
 public Blog get(@PathVariable Integer id){
 // getForObject(服务提供方地址(接口),返回类型.class)
 return restTemplate.getForObject(REST_URL_PREFIX +"/blog/get/"+id, Blog.class);
 }


 /**
 * 消费方添加博客Blog信息
 */
 @PostMapping("/consumer/blog/add")
 public boolean add(Blog blog){
 // postForObject(服务提供方地址(接口),参数实体,返回类型.class)
 return restTemplate.postForObject(REST_URL_PREFIX +"blog/add",blog,Boolean.class);
 }


 /**
 * 消费方查找所有博客
 */
 @GetMapping("/consumer/blog/list")
 public List<Blog> list(){
 return restTemplate.getForObject(REST_URL_PREFIX +"/blog/list", List.class);
 }

}

(6)编写Spring? Boot启动类BlogConsumer_80

package com.yixin.springcloud;

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

@SpringBootApplication
public class BlogConsumer_80 {

 public static void main(String[] args) {
 SpringApplication.run(BlogConsumer_80.class,args);
 }
}

5、测试REST搭建环境

依次启动Spring Boot:

BlogProvider_8001-------->BlogConsumer_80

测试:

访问:http://localhost:8000/consumer/blog/list

注意:我们是以消费方的角度去访问的,我们设置消费方的端口是:8000

结果:

测试成功!

6、复盘全局

进行到这一步,我们基于Spring Cloud的REST环境搭建就已经成功了!我们来看下各个子项目分别都执行了什么功能。

springcloud-api:负责实体类的存放

springcloud-provider-blog-8001:服务提供方,负责与数据库进行交互,dao层和service层都在这个子项目中。

springcloud-consumer-blog-80:消费方,只需负责对请求的调用

服务方与消费方之间通过RestTemplate进行调用。


小结

以上就是【一心同学】对Spring Cloud中Rest环境搭建的详细讲解了,我们再回顾这么【一句话Spring Cloud是基于HTTP的REST方式调用的。对这句话是不是就理解得更加深刻了。

【一心同学】在博客中的讲解喜欢用通俗易懂的文笔去讲明白一个知识点,而不喜欢用那种高大上的官方文笔来进行陈述,如果你对后端知识感兴趣,欢迎关注??????【一心同学】???????。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:10:38  更:2022-01-03 16:11:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:57:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码