当前位置: 首页 > news >正文

137.【SpringCloud-快速搭建】

微服务框架搭建

  • (一)、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-deptdatasource:url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8username: rootpassword: 121788driver-class-name: com.mysql.jdbc.Drivertype: 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 mapperPUBLIC "-//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 {@Resourceprivate DeptDao deptDao;@Overridepublic boolean addDept(Dept dept) {return deptDao.addDept(dept);}@Overridepublic Dept queryById(Long id) {return deptDao.queryById(id);}@Overridepublic 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 {@Resourceprivate 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中去@Beanpublic 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) 地址---- 实体 ----返回类型.classprivate 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: 7001eureka:instance:prefer-ip-address: truehostname: localhostclient: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服务端
@EnableEurekaServerpublic 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@EnableEurekaClientpublic 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-deptdatasource:url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8username: rootpassword: 121788driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceeureka:client:service-url: defaultZone: http://localhost:7001/eureka/ #注册到这个注册中心instance:instance-id: jsxs-dept-eureka-8081 # 服务者的id为这个info:app.name: jsxs-springcloudcompany.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 mapperPUBLIC "-//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 {@Resourceprivate DeptDao deptDao;@Overridepublic boolean addDept(Dept dept) {return deptDao.addDept(dept);}@Overridepublic Dept queryById(Long id) {return deptDao.queryById(id);}@Overridepublic 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 {@Resourceprivate 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@EnableEurekaClientpublic 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: 80eureka: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中去@Beanpublic 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) 地址---- 实体 ----返回类型.classprivate 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@EnableEurekaClientpublic class Demo03Application {public static void main(String[] args) {SpringApplication.run(Demo03Application.class, args);}}

5.测试

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

在这里插入图片描述

相关文章:

137.【SpringCloud-快速搭建】

微服务框架搭建 (一)、SpringCloud-Parent1.创建一个SpringBoot项目2.导入我们的依赖 (二)、SpringCloud-API (实体类)1.创建一个SpringBoot项目2.导入我们的依赖3.创建我们的实体类 (三)、SpringCloud-dept (业务A)1.创建一个SpringBoot项目2.导入我们的依赖3.配置我们的配置信…...

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中&#xff0c;视频只是存储在HTTP服务器中作为一个普通的文件&#xff0c;每个文件有有一个特定的URL。当用户要看视频时&#xff0c;客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷&#xff0c;即所有…...

Linux常见的指令合集

Linux指令合集 认识linuxlinux基础指令1.pwd 命令2. ls 命令3.cd 命令4. man 命令5. grep 命令6. ps 命令7. kill 命令8. netstat 命令9. date 查看当前系统时间10. echo 打印选项 -e linux文件操作指令1. mkdir 命令2. rmdir 命令3. touch 命令4. rm 命令5. mv 命令6. cp 命令…...

字符串_哈希

参考文章&#xff1a; E. Compress Words(字符串hash)_z听歌的小孩z的博客-CSDN博客 字符串哈希 - OI Wiki (oi-wiki.org) 板子&#xff1a; #include<bits/stdc.h> using namespace std; const int N2e450; typedef long long ll; const int mod1e97; typedef unsig…...

python 之enumerate()函数

文章目录 enumerate() 是 Python 中的一个内置函数&#xff0c;它用于在遍历可迭代对象&#xff08;如列表、元组、字符串等&#xff09;时同时获取每个元素的索引和值。这个函数非常有用&#xff0c;因为它允许您在迭代过程中轻松地访问元素的索引&#xff0c;而不需要手动维护…...

【LeetCode刷题(数据结构与算法)】:用队列实现栈

请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09; 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶 int pop() 移除并返回栈顶元素 int top() 返…...

“客户端到服务器的数据传递”和“服务器上的数据传递”这两种数据传递的方式的区别

“客户端到服务器的数据传递”和“服务器上的数据传递”这两种数据传递方式的主要区别如下&#xff1a; 数据的流动方向&#xff1a; 在“客户端到服务器的数据传递”中&#xff0c;数据是从客户端&#xff08;如浏览器&#xff09;流向服务器。在“服务器上的数据传递”中&…...

LCR 181 字符串中的单词反转

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 181. 字符串中的单词反转 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 倒叙遍历&#xff0c;获得每个单词的起始位置与终止位置&#xff0c;然后将每次遇到的单词插入结果中。 解题…...

百度OCR识别图片文本字符串——物联网上位机软件

一、开发背景 根据项目需求&#xff0c;我们需要完成LED显示屏实时显示歌词的效果。最优的方法是调用歌曲播放器的API获取歌词&#xff0c;但是由于这个开发资格不是很好申请&#xff0c;因此我们采用其他方案&#xff0c;即通过OCR识别获取歌词&#xff0c;并投射到LED显示屏上…...

JAVA学习(6)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

睿趣科技:未来抖音开网店还有前景吗

随着科技的快速发展&#xff0c;电商平台已经成为了人们生活中不可或缺的一部分。在中国&#xff0c;抖音作为一个短视频平台&#xff0c;近年来迅速崛起&#xff0c;吸引了大量的用户和商家。那么&#xff0c;在未来&#xff0c;抖音是否还能为商家提供一个有效的电商平台呢?…...

第六章 应用层 | 计算机网络(谢希仁 第八版)

文章目录 第六章 应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器 6.2 文件传送协议6.2.1 FTP概述6.2.2 FTP的基本工作原理6.2.3 简单文件传送协议TFTP 6.3 远程终端协议TELNET6.4 万维网www6.4.1 万维网概述6.4.2 统一资源定位符URL6.4.3 超文…...

c++ lambda 表达式

1. 简介 lambda&#xff08;匿名函数&#xff09;是C11引入的一种函数对象&#xff0c;它允许我们在需要函数的地方创建一个临时的、匿名的函数。lambda表达式表示一个可以执行的代码单元&#xff0c;可以理解为一个未命名的内联函数。Lambda函数可以用于简化代码、提高可读性…...

Go语言入门心法(七): 并发与通道

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一: go语言并发与通道...

前端组件封装:构建模块化、可维护和可重用的前端应用

前端组件封装&#xff1a;构建模块化、可维护和可重用的前端应用 前端开发领域的快速演进已经将前端应用的规模和复杂性提升到了一个新的水平。在这个背景下&#xff0c;前端组件封装成为了一项关键实践&#xff0c;旨在构建模块化、可维护和可重用的前端应用。在本文中&#…...

GPT绘制流程图咒语

【咒语】下面是我的一篇论文选取部分&#xff0c;为了让读者更好理解&#xff0c;我准备画一张图&#xff0c;请你阅读后为我设计一下这个图应该怎么画&#xff0c;更有说服力&#xff0c;更容易理解 论文片段&#xff1a; 多模态数据融合研究的基础在于有效的数据采集。首先&a…...

【扩散模型从原理到实战】Chapter1 扩散模型简介

文章目录 1.1 扩散模型的原理生成模型扩散过程DDPM的扩散过程前向过程反向过程优化目标 1.2 扩散模型的发展开始扩散&#xff1a;DDPM加速生成&#xff1a;采样器刷新记录&#xff1a;基于CLIP的多模态图像生成引爆网络&#xff1a;基于CLIP的多模态图像生成再次“出圈”&#…...

使用轮廓分数提升时间序列聚类的表现

我们将使用轮廓分数和一些距离指标来执行时间序列聚类实验&#xff0c;并且进行可视化 让我们看看下面的时间序列: 如果沿着y轴移动序列添加随机噪声&#xff0c;并随机化这些序列&#xff0c;那么它们几乎无法分辨&#xff0c;如下图所示-现在很难将时间序列列分组为簇: 上面…...

蔬菜水果生鲜配送团购商城小程序的作用是什么

蔬菜水果是人们生活所需品&#xff0c;从业者众多&#xff0c;无论小摊贩还是超市商场都有不少人每天光临&#xff0c;当然这些只是自然流量&#xff0c;在实际经营中&#xff0c;蔬菜水果商家还是面临着一些难题。 对蔬菜水果商家而言&#xff0c;线下门店是重要的&#xff0…...

金融用户实践|分布式存储支持数据仓库业务系统性能验证

作者&#xff1a;深耕行业的 SmartX 金融团队 闫海涛 估值是指对资产或负债的价值进行评估的过程&#xff0c;这对于投资决策具有重要意义。每个金融公司资管业务人员都期望能够实现实时的业务估值&#xff0c;快速获取最新的数据和指标&#xff0c;从而做出更明智的投资决策。…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...