137.【SpringCloud-快速搭建】

news2025/1/10 17:17:44

微服务框架搭建

  • (一)、SpringCloud-Parent
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
  • (二)、SpringCloud-API (实体类)
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
    • 3.创建我们的实体类
  • (三)、SpringCloud-dept (业务A)
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
    • 3.配置我们的配置信息
    • 4.配置我们的MVC框架
      • (1).Dao层和XML
      • (2).server和serverImpl
      • (3).controller
    • 5.测试
      • (1).测试查询
      • (2).测试添加
      • (3).查询全部
  • (四)、SpringCloud-counsmer (用户)
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
    • 3.配置我们的配置信息
    • 4.配置我们的MVC框架
      • (1).controller
    • 5.测试
      • (1).查询全部
      • (2).测试添加
      • (3).测试查找
  • (五)、==⭐配置Eureka注册中心 (服务端)⭐==
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
    • 3.配置我们的配置信息
    • 4.添加注册中心注解
    • 5.测试
  • (六)、SpringCloud-Provider (服务提供者)
    • 1.创建一个SpringBoot项目
    • 2.导入我们的依赖
    • 3.配置我们的配置信息
    • 4.向注册中心注册服务
    • 5.测试
  • (七)、SpringCloud-Provider (服务提供者完整版)
    • 1.导入我们的依赖
    • 2.配置我们的配置文件
    • 3.配置我们的MVC三层框架
      • (1).dao层和mapper的配置
      • (2).server和serverImpl的配置
      • (3).controller的配置
    • 4.向注册中心注册服务
  • (八)、SpringCloud-Consumer (消费者-完整版)
    • 1.导入我们的依赖
    • 2.配置我们的配置文件
    • 3.配置我们的MVC框架
    • 4.向注册中心注册服务
    • 5.测试

(一)、SpringCloud-Parent

1.创建一个SpringBoot项目

然后只保留这四个文件
在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--1.⭐ 这个是后面我们有多少子项目,然后都写在这里进行统一管理。    -->
    <modules>
        <module>demo01</module>
        <module>demo02</module>
    </modules>
    <!--2.⭐ 这个是我们本父类的三大件    -->
    <groupId>com.jsxs</groupId>
    <artifactId>SpringCloundTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringCloundTest</name>
    <description>SpringCloud-parent</description>
    <!--3.⭐ 进行统一管理我们的版本信息   -->
    <properties>
        <java.version>1.8</java.version>
        <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>

    <!--4. ⭐ 更改打包方式-->
    <packaging>pom</packaging>

    <!--5. 使用依赖管理-->
    <dependencyManagement>
        <!--6. ⭐创建依赖项-->
        <dependencies>
            <!--            SpringCloud 的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--           SpringBoot 的依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--          MySql 数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</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>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--  log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!--  lombok   -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

(二)、SpringCloud-API (实体类)

这里的API相当于是我们实体类,实体类全部放在这!!! 实体类不需要启动类和测试类,所以我们需要把这个实体类的启动类给手动删除。

1.创建一个SpringBoot项目

在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1. ⭐指定他的父亲    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2. ⭐三件套   -->
    <groupId>com.jsxs</groupId>
    <artifactId>demo01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo01</name>
    <description>Demo project for Spring Boot</description>
    <!--3. ⭐指定版本    -->
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--4. ⭐依赖性   -->
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.创建我们的实体类

package com.jsxs.pojo;

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

import java.io.Serializable;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:08
 * @PackageName:com.jsxs.pojo
 * @ClassName: Dept
 * @Description: TODO
 * @Version 1.0
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)  //目的是为了打开链式写法,
public class Dept implements Serializable {  // 实体类在网络通信的时候,一定要进行序列化,否则会报错 ORM关系

    private Long deptno;  // 主键
    private String dname;  //部门的名字
    // 这里的数据存在哪个数据库里面。微服务: 一个服务对应一个数据库,同一个信息可能存在不同的数据库中。
    private String db_source;
}

(三)、SpringCloud-dept (业务A)

这里是我们的一个业务:

1.创建一个SpringBoot项目

在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1.⭐指定我们的父类    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2.⭐三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>demo02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo02</name>
    <description>Demo project for Spring Boot</description>
    <!--4.⭐版本控制    -->
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--5.⭐依赖    -->
    <dependencies>
        <!--6.⭐⭐ 引入我们的实体类数据-》API     -->
        <dependency>
            <groupId>com.jsxs</groupId>
            <artifactId>demo01</artifactId>
            <version>0.0.1-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>
        </dependency>
        <!--        jetty-->
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

3.配置我们的配置信息

server:
  port: 8081
# Mybatis的配置
mybatis:
  type-aliases-package: com.jsxs.pojo  # 起别名
  mapper-locations: classpath:mybatis/mapper/*.xml  # 路径配置
  # Spring的配置
spring:
  application:
    name: SpringCloud-provider-dept
  datasource:
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 121788
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

4.配置我们的MVC框架

(1).Dao层和XML

com/jsxs/dao/DeptDao.java

package com.jsxs.dao;

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

import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:29
 * @PackageName:com.jsxs.dao
 * @ClassName: DeptDao
 * @Description: TODO
 * @Version 1.0
 */
@Mapper
@Repository
public interface DeptDao {

    public boolean addDept(Dept dept);

    public Dept queryById(Long id);

    public List<Dept> all();
}

mybatis/mapper/DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 1. 我们首先要绑定工作空间-->
<mapper namespace="com.jsxs.dao.DeptDao">
    <!-- 2.  我们编写SQL语句   -->
    <insert id="addDept" parameterType="com.jsxs.pojo.Dept">
        insert into dept(deptno,dname,db_source)
        values(#{deptno},#{dname},DATABASE())
    </insert>

    <select id="queryById" resultType="com.jsxs.pojo.Dept" parameterType="Long">
        select *from dept where deptno=#{id}
    </select>

    <select id="all" resultType="com.jsxs.pojo.Dept">
        select *from dept
    </select>
</mapper>

(2).server和serverImpl

com/jsxs/service/DeptService.java

package com.jsxs.service;

import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:56
 * @PackageName:com.jsxs.dao.service
 * @ClassName: DeptService
 * @Description: TODO
 * @Version 1.0
 */
public interface DeptService {

    public boolean addDept(Dept dept);

    public Dept queryById(Long id);

    public List<Dept> all();
}

com/jsxs/service/DeptServiceImpl.java

package com.jsxs.service;

import com.jsxs.dao.DeptDao;
import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:57
 * @PackageName:com.jsxs.dao.service
 * @ClassName: DeptServiceImpl
 * @Description: TODO
 * @Version 1.0
 */

@Service
public class DeptServiceImpl implements DeptService {

    @Resource
    private DeptDao deptDao;

    @Override
    public boolean addDept(Dept dept) {
        return deptDao.addDept(dept);
    }

    @Override
    public Dept queryById(Long id) {
        return deptDao.queryById(id);
    }

    @Override
    public List<Dept> all() {
        return deptDao.all();
    }
}

(3).controller

com/jsxs/controller/DeptController.java

package com.jsxs.controller;

import com.jsxs.pojo.Dept;
import com.jsxs.service.DeptService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:59
 * @PackageName:com.jsxs.controller
 * @ClassName: DeptController
 * @Description: TODO
 * @Version 1.0
 */

@RestController
public class DeptController {
    @Resource
    private DeptService deptService;

    @PostMapping("/dept/add")
    public Boolean addDept(Dept dept) {
        boolean flag = deptService.addDept(dept);
        return flag;
    }

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

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

5.测试

(1).测试查询

http://localhost:8081/dept/queryById/1
在这里插入图片描述

(2).测试添加

http://localhost:8081/dept/add?deptno=1&dname=李明&db_source=db01
在这里插入图片描述

(3).查询全部

在这里插入图片描述

(四)、SpringCloud-counsmer (用户)

用户使用业务A

1.创建一个SpringBoot项目

在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1. ⭐ 引入我们的父项目    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2. ⭐本项目的三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>demo03</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo03</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!--3.⭐ 依赖选项    -->
    <dependencies>
        <!--1. ⭐⭐ 这个引入我们的实体类        -->
        <dependency>
            <groupId>com.jsxs</groupId>
            <artifactId>demo01</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--        热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.配置我们的配置信息

server:
  port: 80

com/jsxs/config/ConfigBean.java
提供多种便捷访问远程 访问http服务的方法,简单的Rest

package com.jsxs.config;

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

/**
 * @Author Jsxs
 * @Date 2023/10/15 21:16
 * @PackageName:com.jsxs.config
 * @ClassName: ConfigBean
 * @Description: TODO
 * @Version 1.0
 */
@Configuration
public class ConfigBean {

    //  把RestTemplate注入到Spring中去
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

4.配置我们的MVC框架

因为我们的用户层,只需要控制层即可。不需要业务逻辑层什么的。

(1).controller

package com.jsxs.controller;

import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 21:21
 * @PackageName:com.jsxs.controller
 * @ClassName: DeptConsumerController
 * @Description: TODO
 * @Version 1.0
 */
@RestController
public class DeptConsumerController {
    @Resource
    // (URI url, 实体 map,Class<T> responseType) 地址---- 实体 ----返回类型.class
    private RestTemplate restTemplate;   // 提供多种便捷访问远程   访问http服务的方法,简单的Rest

    //  设置服务层的前缀为常量
    private static final String REST_URL_PREFIX = "http://localhost:8081";

    //  根据id进行数据的查找
    // 用户层的这个访问路径可以随意写,没有必要和服务层的路径完全一致
    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long deptno) {
        // 这里返回的是: 服务层的路径
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/queryById/" + deptno, Dept.class);
    }

    //  添加数据
    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
    }

    //  查找全部数据
    @RequestMapping("/consumer/dept/all")
    public List<Dept> all() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/all", List.class);
    }
}

5.测试

==启动

(1).查询全部

在这里插入图片描述

(2).测试添加

在这里插入图片描述

(3).测试查找

在这里插入图片描述

以上的微服务框架并未使用我们的注册中心,不能说是真正的微服务框架的!!!

(五)、⭐配置Eureka注册中心 (服务端)⭐

1.创建一个SpringBoot项目

在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1.⭐引入我们的父类    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2.⭐自己的三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>eureka-7001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-7001</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--3.⭐导入我们的依赖    -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--      热部署工具  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

3.配置我们的配置信息

server:
  port: 7001

eureka:
  instance:
    prefer-ip-address: true
    hostname: localhost
  client:
    register-with-eureka: false  # 是否将自己注册进注册中心
    fetch-registry: false  # 是否是注册中心:  是
    service-url:
      defaultzone: http://${eureka.instance.hostname}:${server.port}/eureka/

4.添加注册中心注解

package com.jsxs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

// ⭐⭐ 开启我们的Eureka服务端
@EnableEurekaServer

public class Eureka7001Application {

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

}

5.测试

在这里插入图片描述

(六)、SpringCloud-Provider (服务提供者)

1.创建一个SpringBoot项目

在这里插入图片描述

2.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1.引入我们的父类    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2.自己的三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>eureka-provider-8001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-provider-8001</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--3.依赖    -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!-- ⭐一定要添加web的驱动,要不然启动不成功!!!       -->
        <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>
    </dependencies>

</project>

3.配置我们的配置信息

server:
  port: 8001
  # Spring的配置
spring:
  application:
    name: SpringCloud-provider-dept
  # Eureka 服务注册到哪里?
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: jsxs-01

4.向注册中心注册服务

package com.jsxs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class EurekaProvider8001Application {

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

}

5.测试

在这里插入图片描述

(七)、SpringCloud-Provider (服务提供者完整版)

1.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1.⭐指定我们的父类    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2.⭐三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>demo02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo02</name>
    <description>Demo project for Spring Boot</description>
    <!--4.⭐版本控制    -->
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--5.⭐依赖    -->
    <dependencies>
        <!--6.⭐⭐ 引入我们的实体类数据-》API     -->
        <dependency>
            <groupId>com.jsxs</groupId>
            <artifactId>demo01</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!-- 7. ⭐⭐⭐ eureka客户端的和监视器       -->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</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>
        <!--        test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <!--        jetty-->
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

2.配置我们的配置文件

server:
  port: 8081
# Mybatis的配置
mybatis:
  type-aliases-package: com.jsxs.pojo  # 起别名
  mapper-locations: classpath:mybatis/mapper/*.xml  # 路径配置
  # Spring的配置
spring:
  application:
    name: SpringCloud-provider-dept
  datasource:
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 121788
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    
eureka:
  client:
    service-url: 
      defaultZone: http://localhost:7001/eureka/ #注册到这个注册中心
  instance:
    instance-id: jsxs-dept-eureka-8081 # 服务者的id为这个
    
info:
  app.name: jsxs-springcloud
  company.name: pdd

3.配置我们的MVC三层框架

(1).dao层和mapper的配置

com/jsxs/dao/DeptDao.java

package com.jsxs.dao;

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

import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:29
 * @PackageName:com.jsxs.dao
 * @ClassName: DeptDao
 * @Description: TODO
 * @Version 1.0
 */
@Mapper
@Repository
public interface DeptDao {

    public boolean addDept(Dept dept);

    public Dept queryById(Long id);

    public List<Dept> all();
}

mybatis/mapper/DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 1. 我们首先要绑定工作空间-->
<mapper namespace="com.jsxs.dao.DeptDao">
    <!-- 2.  我们编写SQL语句   -->
    <insert id="addDept" parameterType="com.jsxs.pojo.Dept">
        insert into dept(deptno,dname,db_source)
        values(#{deptno},#{dname},DATABASE())
    </insert>

    <select id="queryById" resultType="com.jsxs.pojo.Dept" parameterType="Long">
        select *from dept where deptno=#{id}
    </select>

    <select id="all" resultType="com.jsxs.pojo.Dept">
        select *from dept
    </select>
</mapper>

(2).server和serverImpl的配置

com/jsxs/service/DeptService.java

package com.jsxs.service;

import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:56
 * @PackageName:com.jsxs.dao.service
 * @ClassName: DeptService
 * @Description: TODO
 * @Version 1.0
 */
public interface DeptService {

    public boolean addDept(Dept dept);

    public Dept queryById(Long id);

    public List<Dept> all();
}

com/jsxs/service/DeptServiceImpl.java

package com.jsxs.service;

import com.jsxs.dao.DeptDao;
import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:57
 * @PackageName:com.jsxs.dao.service
 * @ClassName: DeptServiceImpl
 * @Description: TODO
 * @Version 1.0
 */

@Service
public class DeptServiceImpl implements DeptService {

    @Resource
    private DeptDao deptDao;

    @Override
    public boolean addDept(Dept dept) {
        return deptDao.addDept(dept);
    }

    @Override
    public Dept queryById(Long id) {
        return deptDao.queryById(id);
    }

    @Override
    public List<Dept> all() {
        return deptDao.all();
    }
}

(3).controller的配置

com/jsxs/controller/DeptController.java

package com.jsxs.controller;

import com.jsxs.pojo.Dept;
import com.jsxs.service.DeptService;
import org.springframework.stereotype.Controller;
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 javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 19:59
 * @PackageName:com.jsxs.controller
 * @ClassName: DeptController
 * @Description: TODO
 * @Version 1.0
 */

@RestController
public class DeptController {
    @Resource
    private DeptService deptService;

    @PostMapping("/dept/add")
    public Boolean addDept(Dept dept) {
        boolean flag = deptService.addDept(dept);
        return flag;
    }

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

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

4.向注册中心注册服务

com/jsxs/Demo02Application.java

package com.jsxs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class Demo02Application {

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

}

(八)、SpringCloud-Consumer (消费者-完整版)

1.导入我们的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--1. ⭐ 引入我们的父项目    -->
    <parent>
        <groupId>com.jsxs</groupId>
        <artifactId>SpringCloundTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--2. 本项目的三件套    -->
    <groupId>com.jsxs</groupId>
    <artifactId>demo03</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo03</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!--3.⭐ 依赖选项    -->
    <dependencies>
        <!--1.这个引入我们的实体类        -->
        <dependency>
            <groupId>com.jsxs</groupId>
            <artifactId>demo01</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--2.引入我们的erueka和监视器        -->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--        热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.配置我们的配置文件

server:
  port: 80

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/  #像那一个注册中心注册自己
  instance:
    instance-id: jsxs-dept-eureka-80  # 编号
spring:
  application:
    name: SpringCloud-counsumer-dept

3.配置我们的MVC框架

com/jsxs/config/ConfigBean.java

package com.jsxs.config;

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

/**
 * @Author Jsxs
 * @Date 2023/10/15 21:16
 * @PackageName:com.jsxs.config
 * @ClassName: ConfigBean
 * @Description: TODO
 * @Version 1.0
 */
@Configuration
public class ConfigBean {

    //  把RestTemplate注入到Spring中去
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

com/jsxs/controller/DeptConsumerController.java

package com.jsxs.controller;

import com.jsxs.pojo.Dept;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jsxs
 * @Date 2023/10/15 21:21
 * @PackageName:com.jsxs.controller
 * @ClassName: DeptConsumerController
 * @Description: TODO
 * @Version 1.0
 */
@RestController
public class DeptConsumerController {
    @Resource
    // (URI url, 实体 map,Class<T> responseType) 地址---- 实体 ----返回类型.class
    private RestTemplate restTemplate;   // 提供多种便捷访问远程   访问http服务的方法,简单的Rest

    //  设置服务层的前缀为常量
    private static final String REST_URL_PREFIX = "http://localhost:8081";

    //  根据id进行数据的查找
    // 用户层的这个访问路径可以随意写,没有必要和服务层的路径完全一致
    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long deptno) {
        // 这里返回的是: 服务层的路径
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/queryById/" + deptno, Dept.class);
    }

    //  添加数据
    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
    }

    //  查找全部数据
    @RequestMapping("/consumer/dept/all")
    public List<Dept> all() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/all", List.class);
    }
}

4.向注册中心注册服务

package com.jsxs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class Demo03Application {

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

}

5.测试

  • 先开启注册中心: eureka->7001;
  • 然后开启我们的服务提供者: demo2->8081;
  • 最后开启我们的服务消费者: demo3->80

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣第39题 组合总和 c++ 回溯剪枝题

题目 39. 组合总和 中等 相关标签 数组 回溯 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…

故障诊断开源代码推荐 | 轴承故障诊断迁移学习综述,免费获取!

故障诊断开源代码推荐 | 轴承故障诊断迁移学习综述&#xff0c;免费获取&#xff01; 1 论文基本信息2 摘要3 目录4 引言5 定义与故障诊断流程6 开源轴承故障数据集7 轴承故障的迁移学习诊断8 定性分析9 机遇与挑战10 总结11 README.md 针对故障诊断领域开源代码较少&#xff0…

身份证OCR识别:黑科技助力证件信息快速提取

身份证OCR识别是一种基于光学字符识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;技术的自动化身份证信息提取和识别过程。它通过将纸质身份证上的文字、数字、图像等内容转换为可电子化编辑和处理的数据形式&#xff0c;实现了对身份证信息的快速、…

Apache IoTDB v1.2.2 发布|增加 flink-sql-connector、tsfile 文件级级联传输等功能

Release Announcement Version 1.2.2 Apache IoTDB v1.2.2 已经发布&#xff0c;主要增加了 flink-sql-iotdb-connector 插件、tsfile 文件级级联传输、count_time 聚合函数等新特性&#xff0c;优化了 Limit & Offset 查询性能、ConfigNode 重启逻辑等&#xff0c;并提升…

Vue.js2+Cesium1.103.0 十三、通过经纬度查询 GeoServer 发布的 wms 服务下的 feature 对象的相关信息

Vue.js2Cesium1.103.0 十三、通过经纬度查询 GeoServer 发布的 wms 服务下的 feature 对象的相关信息 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><div style"position: absolute;z-index: 999;bott…

Unity AI Muse 基础教程

Unity AI Muse 基础教程 Unity AI 内测资格申请Unity 项目Package ManagerMuse Sprite 安装Muse Texture 安装 Muse Sprite 基础教程什么是 Muse Sprite打开 Muse Sprite 窗口Muse Sprite 窗口 参数Muse Sprite Generations 窗口 参数Muse Sprite Generations 窗口 画笔Muse Sp…

小程序开发平台源码系统+ 带前后端完整搭建教程

大家好&#xff0c;给大家分享一个小程序开发平台源码系统。这款小程序开发平台中有很多功能&#xff0c;今天主要来给大家介绍一下洗车行业小程序制作的功能。以下是部分核心代码图&#xff1a; 系统特色功能&#xff1a; LBS定位&#xff1a;小程序能够自动显示附近的共享洗…

稀里糊涂的转义

一、前言 前段时间挖机ERP系统出现一个问题&#xff0c;表单录入客户名称是 L & Q International Trading Limited&#xff0c;然后页面展示变成 L &amp; Q International Trading Limited&#xff0c;即字符 &变成了&amp&#xff1b;。 二、为什么要转义 &…

Vue-3.5vuex分模块

模块module 由于vuex使用单一状态树&#xff0c;应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时&#xff0c;store对象就有可能变得相当臃肿。&#xff08;当项目变得越来越大的时候&#xff0c;Vuex会变得越来越难以维护&#xff09; 模块创建 先在store文…

提升协作效率:钉钉流程与低代码平台的无缝对接

摘要&#xff1a;本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 钉钉作为目前很多企业都在使用的移动办公平台&#xff0c;提供了很多常用的OA审批功能&…

剑指智能驾驶,智己LS6胜算几何?

监制 | 何玺 排版 | 叶媛 10月12日&#xff0c;IM智己旗下的新车智己LS6宣布上市。 新车型搭载尖端科技多项&#xff0c;其中以“全画幅数字驾舱屏”、和城市高阶智能辅助驾驶为核心的智驾技术&#xff0c;更是引来众多用户关注。 01 新能源新卷王智己LS6 智己LS6一发布就…

浅谈智能照明控制系统在体育馆中的应用

【摘要】在社会经济日益发展的今天&#xff0c;人们的物质文化水平都有着不同程度上的提高。与此同时人们更加追求高质量的工作和生活环境。照明在现代化的多功能体育场馆中是非常重要的一个环节。智能化的照明控制系统能够根据环境的变化以及客户的需求等条件来自动调节照明系…

解密推荐系统:用Redis解决特征存储问题

文章目录 &#x1f31f; 线上服务&#xff1a;如何在线上提供高并发的推荐服务&#xff1f;&#x1f34a; 1. 架构设计&#x1f34a; 2. 负载均衡&#x1f34a; 3. 高并发处理&#x1f34a; 4. 监控和调整&#x1f34a; 5. 数据安全 &#x1f31f; 存储模块&#xff1a;如何用R…

1.15.C++项目:仿muduo库实现并发服务器之HttpRequest和HttpResponse模块的设计

文章目录 一、HttpRequest模块二、HttpResponse模块三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义 四、代码 一、HttpRequest模块 二、HttpResponse模块 三、实现思想 &#xff08;一&#xff09;功能 HttpRequest模块 存储HTTP请求信息 接收到…

基于若依和flowable6.7.2的ruoyi-nbcio流程管理系统正式发布

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 项目概要 本项目基于 RuoYi-Flowable-Plus 进行二次开发&#xff0c;从nbcio-boot(https://gitee.com/nb…

maven 常用知识速记

创建项目 maven archetype:generate依赖范围 有如下依赖示例&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><scope>test</scope> </dependency>其中…

Unity中用序列化和反序列化来保存游戏进度

[System.Serializable]标记类 序列化 [System.Serializable]是一个C#语言中的属性&#xff0c;用于标记类&#xff0c;表示该类的实例可以被序列化和反序列化。序列化是指将对象转换为字节流的过程&#xff0c;以便可以将其保存到文件、数据库或通过网络传输。反序列化则是将字…

Davinci NvM Block配置

存储块的配置方法 在下图中的位置添加Block的时候&#xff0c;Davinci会在NVM模块和Fee模块同时添加Block&#xff0c;并进行关联。且Fee Block的数量由NvM Block的类型决定&#xff0c;当NvM Block是Native时&#xff0c;会生成一个Fee Block&#xff1b;当NvM Block是Redund…

ant design vue:自定义锚点样式

要做一个如下图的锚点&#xff0c;ant design vue的锚点样式比较简单&#xff0c;按照官网文档:affix"false" :showInkInFixed"true"&#xff0c;就可以显示小方块&#xff0c;但是我试了一下不管用&#xff0c;而且锚点组件不固定起来很不方便&#xff0c…

[大三上20231016]JavaEE SpringBoot

[大三上20231016]JavaEE SpringBoot 学习是个积累,踏踏实实去做,多去虚心请教,热爱兴趣很重要 课前提问: Spring框架中的核心组件是什么? IOC,AOP IOC: Inversion of Control即控制反转 AOP: Aspect Oriented Programming 面向切面编程 什么是IOS什么是DI? IOS(作用:…