栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springCloud入门案例(详细)-服务调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springCloud入门案例(详细)-服务调用

目录

1、案例说明

2、创建数据库

3、服务提供者搭建:

(1)创建普通maven工程

(2)引入相关依赖

(3)配置application.yml文件

(4)创建主启动类

(5)创建实体类

(6)创建dao层

(7)创建service层

(8)创建controller层

4、服务消费者

(1)创建maven工程,同上。

(2)导入依赖

(3)配置application.yml

(4)创建主启动类

(5)创建实体类

(6)创建配置类

(7)创建controller

5、测试


1、案例说明

创建一个服务提供者和一个服务消费者,服务提供者中有添加,查找功能,服务消费者远程调用服务提供者实现数据添加,查找功能。如下图:

2、创建数据库
CREATE DATABASE  IF NOT EXISTS springcloud DEFAULT CHARACTER SET utf8 ;

USE springcloud ;

DROp TABLE IF EXISTS payment ;

CREATE TABLE payment (
  id BIGINT (20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  SERIAL VARCHAr (300) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 33 DEFAULT CHARSET = utf8 ;

INSERT INTO payment (id, SERIAL) VALUES(31, '小明'),(32, '小张') ;

3、服务提供者搭建:

(1)创建普通maven工程

 

 (2)引入相关依赖

注意:引入的lombok依赖还需要去下载lombok插件


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
            mysql
            mysql-connector-java
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

    

(3)配置application.yml文件

①配置服务端口号(port),端口号为8002。

②配置服务名称(name),相同服务名称相同,不同服务名称·一定不能相同。

③配置数据库数据源,以下数据库为mysql8.0.

④配置mybatis映射文件位置。

server:
  port: 8002

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: 数据库用户名
    password: 数据库密码

mybatis:
  mapperLocations: classpath:/mapper/*.xml
  type-aliases-package: com.su.pojo

(4)创建主启动类

@SpringBootApplication:启动类注解

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

(5)创建实体类

实体类上注解为lombok提供

①@Data:属性的get和set方法。

②@AllArgConstructor:实体类的有参构造。

③@NoArgsConstructor:实体类无参构造。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
    private int id;
    private String serial;
}

(6)创建dao层

PaymentMapper接口

@Mapper:mybatis提供生命bean注解。

@Mapper
public interface PaymentMapper {
    //添加数据
    void insertPayment(Payment payment);
    //查询数据
    Payment findById(Integer id);
}

PaymentMapper.xml映射文件:

useGeneratedKeys="true" keyProperty="id":为主键回填,即主键id自动生成后,回填到实体类中,确保实体类id不为空。




    
        insert into payment (serial) values (#{serial})
    

    

 (7)创建service层

PaymentService接口:

public interface PaymentService {
    //添加数据
    void insertPayment(Payment payment);
    //查询数据
    Payment findById(Integer id);
}

 PaymentServiceImpl实现接口类:

@Service:service层注册到spring容器中

@Autrowired:自动注入PaymentMapper并创建bean容器

@Service
public class PaymentServiceImpl implements PaymentService{
    @Autowired
    private PaymentMapper paymentMapper;

    @Override
    public void insertPayment(Payment payment) {
        paymentMapper.insertPayment(payment);
    }

    @Override
    public Payment findById(Integer id) {
        return paymentMapper.findById(id);
    }
}

 (8)创建controller层

@RestController:@ResponeBody+@Controller

@GetMapping:get请求注解

@PathVariable:获取请求url中的参数

@RestController
public class PaymentController {
    @Autowired
    private PaymentService paymentService;

    @PostMapping("/insert")
    public String insertPay(@RequestBody Payment payment){
        paymentService.insertPayment(payment);
        return "success";
    }
    @GetMapping("/find/{id}")
    public String findById(@PathVariable("id") Integer id){
        Payment payment = paymentService.findById(id);
        if (payment==null){
            return "无此数据";
        }else {
            return "查询成功,id:"+payment.getId()+",serial:"+payment.getSerial();
        }
    }
}

4、服务消费者

(1)创建maven工程,同上。

(2)导入依赖

     
          org.springframework.boot
          spring-boot-starter-web
      
      
          org.springframework.boot
          spring-boot-starter-actuator
      
      
          org.projectlombok
          lombok
          true
      
      
          org.springframework.boot
          spring-boot-starter-test
          test
      

(3)配置application.yml

配置端口号和服务名称

server:
  port: 8001
spring:
  application:
    name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
    public static void main(String[] args) {
        SpringApplication.run(Consumer8001.class,args);
    }
}
(5)创建实体类

可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
    private int id;
    private String serial;
}

(6)创建配置类

配置类创建远程调用容器:

@Configuration:标志为注解类

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

(7)创建controller

RestTemplate远程调用服务Provider:

①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);

②getForObject(”远程调用url“,”调用服务返回类型“)。

@RestController
public class PaymentController {
    @Autowired
    private RestTemplate restTemplate;

    @PostMapping("insert")
    public String insert(@RequestBody Payment payment){
        restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
        return "success";
    }

    @GetMapping("find/{id}")
    public String find(@PathVariable("id") Integer id){
        return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
    }

}

5、测试

访问 http://localhost:8001/find/31:

consumer8001远程调用provider8002服务,结构如下图:

 

 测试成功!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/848176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号