欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于springcloud实现服务之间调用

程序员文章站 2022-05-04 08:54:05
关于springcloud实现服务之间调用创建父工程、任意名字创建子项目grade-euraka目录结构如下图pom.xml加入依赖

关于springcloud实现服务之间调用

本文使用euraka搭建,实现服务者与消费者之间的调用
数据库脚本以及源码地址
链接:https://pan.baidu.com/s/1tyy-yzTN_l44R-OQoyGDWQ
提取码:8nkv

第一步创建数据库grade并建表student

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT,
  `sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sno` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张无忌', '001');
INSERT INTO `student` VALUES (2, '李亦非', '002');
INSERT INTO `student` VALUES (3, '小古', '003');
INSERT INTO `student` VALUES (4, '陈丽', '004');
INSERT INTO `student` VALUES (5, '王邱村', '005');
INSERT INTO `student` VALUES (6, '测试', '004');
INSERT INTO `student` VALUES (7, '莫', '009');
INSERT INTO `student` VALUES (8, '周芷若', '008');

SET FOREIGN_KEY_CHECKS = 1;

创建父工程、任意名字
创建子项目
euraka01目录结构如下图

关于springcloud实现服务之间调用

pom.xml加入依赖

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qinheyou</groupId>
    <artifactId>eureka01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka01</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

</project>

application.yml配置文件信息

server:
  ## 端口号
  port: 20001
spring:
  application:
    ##定义服务名称
    name: eureka01
eureka:
  client:
    service-url:
      ## 注册地址
      defaultZone: http://127.0.0.1:${server.port}/eureka
    ####因为自己是注册中心,是否需要将自己注册给自己的注册中心(集群的时候是需要是为true),不加默认注册自己
    register-with-eureka: false
    ###因为自己是注册中心, 不需要去检索服务信息
    fetch-registry: false

启动类Eureka01Application

package com.qinheyou.euraka;

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

@SpringBootApplication
@EnableEurekaServer // 声明当前springboot应用是一个eureka服务中心
public class Euraka01Application {

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

}



注册中心配置完成了
下面是我们的提供者provider01
目录结构如下

关于springcloud实现服务之间调用

第一步依旧是pom.xml文件

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qinheyou</groupId>
    <artifactId>provider01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider01</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>

        <!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- Swagger starter-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>
        <!-- Swagger ui-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
        </dependency>

        <!--hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.7.Final</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.netflix.hystrix/hystrix-javanica -->
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-javanica</artifactId>
            <version>1.5.12</version>
        </dependency>

    </dependencies>

    <!-- SpringCloud的依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

</project>


application.yml

server:
  ###会员服务启动端口号
  port: 20002
spring:
  application:
    ### 服务名称(注意,这里对应的是消费者StudentClient接口中的value属性 :@FeignClient(value = "provider01"))
    name: provider01
    main:
      allow-bean-definition-overriding: true
  logging:
    level:
      root: info
      org.springframework: info
  profiles:
    active: '@profiles.active@'
  datasource:
    url: jdbc:mysql://localhost:3306/grade?serverTimezone=GMT%2B8
    ## 这里是数据库名称,
    username: root
    ## 这里是你的数据库密码,要改一下哦
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
mybatis:
  type-aliases-package: com.qinheyou,provider.entity
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:20001/eureka

实体类Student

package com.qinheyou.provider.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * @program: grade-service-provider
 * @author: Mr.Mo
 * @create: 2020-07-11 16:45
 **/
@Entity
@Table(name = "student")
@ApiModel(value="学生表",description = "这是学生表")
@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
public class Student implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    // 学生姓名
    @Column(name = "sname")
    private String sname;

    // 学生学号
    @Column(name = "sno")
    private String sno;

    //targetEntity属性表示默认关联的实体类型,默认为当前标注的实体类;
    //cascade属性表示与此实体一对一关联的实体的联级样式类型。联级样式上当对实体进行操作时的策略。
    //·CascadeType.PERSIST (级联新建)
    //·CascadeType.REMOVE (级联删除)
    //·CascadeType.REFRESH (级联刷新)
    //·CascadeType.MERGE (级联更新)中选择一个或多个。
    //·还有一个选择是使用CascadeType.ALL ,表示选择全部四项

    //fetch属性是该实体的加载方式,有两种:LAZY和EAGER。

    //optional属性表示关联的实体是否能够存在null值。默认为true,表示可以存在null值。如果为false,则要同时配合使用@JoinColumn标记。

    //mappedBy属性用于双向关联实体时,标注在不保存关系的实体中。


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }


}



mapper

package com.qinheyou.provider.mapper;

import com.qinheyou.provider.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import tk.mybatis.mapper.common.BaseMapper;

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}

service

package com.qinheyou.provider.service;


import com.qinheyou.provider.entity.Student;
import com.qinheyou.provider.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @program: grade-service-provider
 * @author: Mr.M
 * @create: 2020-07-14
 **/
@Service
public class StudentService {

//    @Autowired
//    private StudentDao studentDao;

    @Autowired
    private StudentMapper studentMapper;

    public Student queryById(Long id) {
        return this.studentMapper.selectByPrimaryKey(id);
    }

}

controller

package com.qinheyou.provider.contronller;

import com.qinheyou.provider.entity.Student;
import com.qinheyou.provider.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("student/")
@CrossOrigin
public class StudentController {

    @Autowired
    private StudentService studentService;


    /**
     * @Author: M
     * @Description: 根据id查询,此方法调用mybatis实现
     * @DateTime: 2020/7/14
     * @Params: [id]
     * @Return cn.grade.service.entity.Student
     */
//    访问地址
//    http://localhost:20002/student/getByid/5
    @GetMapping("getByid/{id}")
    public Student queryById(@PathVariable("id") Long id) {
        return this.studentService.queryById(id);
    }
}


启动类Provider01Application

package com.qinheyou.provider;




import com.spring4all.swagger.EnableSwagger2Doc;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringCloudApplication
@EnableDiscoveryClient
@EnableJpaRepositories
@EnableSwagger2Doc
public class Provider01Application {
    public static void main(String[] args) {
        SpringApplication.run(Provider01Application.class, args);
    }
}

提供者完成,接下是消费者member01
目录结构
关于springcloud实现服务之间调用

pom.xml

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qinheyou</groupId>
    <artifactId>member01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>member01</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
    </properties>

    <dependencies>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- Swagger starter-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>
        <!-- Swagger ui-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

</project>


application.yml

server:
  port: 20003
spring:
  application:
    name: member01
eureka:
  client:
    service-url:
      defaultZone: http://localhost:20001/eureka

实体类Student


package com.qinheyou.member.entity;

/**
 * @program: grade-service-provider
 * @author: Mr.Mo
 * @create: 2020-07-11 18:23
 **/

public class Student {

    private static final long serialVersionUID = 1L;


    private Long id;

    // 学生姓名
    private String sname;

    // 学生学号
    private String sno;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }
}


StudentClient

package com.qinheyou.member.client;


import com.qinheyou.member.entity.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @program: grade-service-provider
 * @author: Mr.Mo
 * @create: 2020-07-11 18:21
 **/

// 注意,这里value属性对应的是提供者的服务名称
@FeignClient(value = "provider01") // 标注该类是一个feign接口
public interface StudentClient {

    @GetMapping(value = "student/getByid/{id}")
    @ResponseBody
    Student getStudent(@PathVariable("id") Long id);
}


StudentController

package com.qinheyou.member.contronller;

import com.qinheyou.member.client.StudentClient;
import com.qinheyou.member.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @program: grade-service-provider
 * @author: Mr.Mo
 * @create: 2020-07-11 18:22
 **/
@RestController
@RequestMapping("consumer/")
@CrossOrigin
public class StudentController {

    @Autowired
    private StudentClient client;

    //consumer/getByid/1
    @GetMapping("getByid/{id}")
    public Student getStudent(@PathVariable("id") Long id ) {
        Student student = client.getStudent(id);
        System.out.println("输出:"+student);
        System.out.println("姓名:"+student.getSname());
        return student;
    }
}



启动类Member01Application

package com.qinheyou.member;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class Member01Application {
    public static void main(String[] args) {
        SpringApplication.run(Member01Application.class,args);
    }
}


接下来打开浏览器测试
按图片上面步骤
访问地址 http://localhost:20001
关于springcloud实现服务之间调用

2
关于springcloud实现服务之间调用
3
修改路径地址
http://localhost:20002/student/getByid/5
关于springcloud实现服务之间调用
4
查询成功后,实现调用关于springcloud实现服务之间调用
5
关于springcloud实现服务之间调用
关于springcloud实现服务之间调用
更改路径
http://localhost:20003/consumer/getByid/1
关于springcloud实现服务之间调用
关于springcloud实现服务之间调用

有问题请留言,.

本文地址:https://blog.csdn.net/a19994454401/article/details/107472584