当前位置: 移动技术网 > IT编程>开发语言>Java > 关于springcloud实现服务之间调用

关于springcloud实现服务之间调用

2020年07月22日  | 移动技术网IT编程  | 我要评论
关于springcloud实现服务之间调用创建父工程、任意名字创建子项目grade-euraka目录结构如下图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="ht

关于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目录结构如下图

在这里插入图片描述

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
目录结构如下

在这里插入图片描述

第一步依旧是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
目录结构
在这里插入图片描述

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://www.lhsxpumps.com/_localhost:20001
在这里插入图片描述

2
在这里插入图片描述
3
修改路径地址
http://www.lhsxpumps.com/_localhost:20002/student/getByid/5
在这里插入图片描述
4
查询成功后,实现调用在这里插入图片描述
5
在这里插入图片描述
在这里插入图片描述
更改路径
http://www.lhsxpumps.com/_localhost:20003/consumer/getByid/1
在这里插入图片描述
在这里插入图片描述

有问题请留言,.

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网