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

SpringCloud进阶-消费者模块 +工程重构

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

SpringCloud进阶-消费者模块 +工程重构

一、消费者订单模块(上)

1、创建名为cloud-consumer-order80的消费者订单模块



2、改pom.xml

order消费者模块下的xml:



    
        cloud2022
        com.atguidu.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-consumer-order80

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    




3、application.yml


application.yml:

server:
  port: 80
4、主启动类


OrderMain80.java:

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

5、业务类

1、实体类需要使用,entities:

Payment.java

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
    private Long id;
    private String serial;
}

CommonResult.java

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult{
    private Integer code;
    private String message;
    private T data;

    
    public CommonResult(Integer code, String message){
        this(code, message, null);
    }
}

2、消费者需要一个controller即可


3、RestTemplate


6、RestTemplate

1、新建一个ApplicationContextConfig类,在config包下

2、修改ApplicationContextConfig类

ApplicationContextConfig.java

package com.atguigu.springcloud.config;

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

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

3、在OrderController里使用



OrderController.java

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderController {
    @Resource
    private RestTemplate restTemplate;

    public static final String PAYMENT_URL = "http://localhost:8001";

    @GetMapping("/consumer/payment/create")
    public CommonResult create(Payment payment){

        return restTemplate.postForObject(PAYMENT_URL+"/payment/create", payment, CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult getPayment(@PathVariable("id") Long id){
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id, CommonResult.class);
    }

}



4、测试
启动8001和80,
8001 ok

80端口ok:

二、消费者订单模块(下) 1、完善写操作
浏览器 - http://localhost/consumer/payment/create?serial=111

虽然,返回成功,但是观测数据库中,并没有创建serial为111的行。

解决之道:在cloud-provider-payment8001工程的PaymentController中添加@RequestBody注解。


PaymentController.java:

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;


@RestController
@Slf4j
@RequestMapping("/payment")
public class PaymentController{
    @Resource
    private PaymentService paymentService;

    @PostMapping(value = "/create")
    public CommonResult create(@RequestBody Payment payment)
    {
        int result = paymentService.create(payment);
        log.info("*****插入结果:"+result);

        if(result > 0)
        {
            return new CommonResult(200,"插入数据库成功",result);
        }else{
            return new CommonResult(444,"插入数据库失败",null);
        }
    }

    @GetMapping(value = "/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id)
    {
        Payment payment = paymentService.getPaymentById(id);

        if(payment != null)
        {
            return new CommonResult(200,"查询成功",payment);
        }else{
            return new CommonResult(444,"没有对应记录,查询ID: "+id,null);
        }
    }
}




2、开启Run DashBoard

通过修改idea的workspace.xml的方式来快速打开Run Dashboard窗口(这个用来显示哪些Spring Boot工程运行,停止等信息。
我idea 2020.1版本在名为Services窗口就可以显示哪些Spring Boot工程运行,停止等信息出来,所以这仅作记录参考)。
2、开启Run DashBoard
  • 打开工程路径下的.idea文件夹的workspace.xml

  • 在中修改或添加以下代码:



由于idea版本差异,可能需要关闭重启。



目前我的idea里没有这个东西,据说现在是下方的services

三、工程重构
新建cloud-api-commons
1.建module
2.改pom
3.写yml

1、观察问题


系统中有重复部分,重构

2、cloud-api-commons

创建名为cloud-api-commons的module


pom.xml



    
        cloud2022
        com.atguidu.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-api-commons

    
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            cn.hutool
            hutool-all
            5.1.0
        
    




3、 将entities拷贝到commons模块


Payment.java

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
    private Long id;
    private String serial;
}


CommonResult.java

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult{
    private Integer code;
    private String message;
    private T data;

    
    public CommonResult(Integer code, String message){
        this(code, message, null);
    }
}


4、用maven打包,发布上传到公用本地库,供其他工程调用。

maven -> clean -> install

5、对订单模块和支付模块分别改造

1.删除各自原先有的entities文件夹
2.各自引入自定义的commons包


            com.atguidu.springcloud
            cloud-api-commons
            ${project.version}
        

3.测试运行

目前工程样图:

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

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

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