SpringCloud-创建项目

java 17+ cloud 2023.0.0 boot 3.2.0 cloud alibaba 2022.0.0.0-Rc2 maven 3.9+ mysql 8.0+

一、创建项目

  1. new project

  2. 聚合总父工程名字

  3. 字符编码

4.注解生效激活

5.java编译版本选17

6.file type 过滤

删除src

1.1maven中的dependencyManagerdependencies

一般在项目最顶层pom中看到dependencyManager能让所有在子项目中引用一个依赖而不显示的列出版本号,maven会沿着父子层次向上走,知道找到一个拥有dependencyManagement元素的项目,然后就会使用这个dependencyManagement元素中指定的版本号

好处:如果有多个子项目都引用一样依赖,则可以避免在每个使用的子项目里面都声明一个版本号

  1. 当想升级或切换另一个版本的时候,只需要在顶层父容器更新,而不需要一个一个修改子项目

  2. 如果某个子项目需要另外一个版本,只需要声明version就可。

1.2跳过单元测试配置

1.3创建子项目

步骤

  1. 建module

  2. 改pom

  3. 写yml

  4. 主启动

  5. 写业务

1.4Swagger3

  1. 1.加注解

注解标注位置作用
@Tagcontroller类标识controller作用
@Parameter参数标识参数作用
@Parameters参数参数多重说明
@Schemamodle层的javaBean描述魔性作用及每个属性
@Operation方法描述方法作用
@ApiRestponse方法描述响应状态码等

2.含分组迭代的Config配置类

package com.atguigu.cloud.config;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Swagger3Config
{
    @Bean
    public GroupedOpenApi PayApi()
    {
        return GroupedOpenApi.builder().group("支付微服务模块").pathsToMatch("/pay/**").build();
    }
    @Bean
    public GroupedOpenApi OtherApi()
    {
        return GroupedOpenApi.builder().group("其它微服务模块").pathsToMatch("/other/**", "/others").build();
    }
    /*@Bean
    public GroupedOpenApi CustomerApi()
    {
        return GroupedOpenApi.builder().group("客户微服务模块").pathsToMatch("/customer/**", "/customers").build();
    }*/

    @Bean
    public OpenAPI docsOpenApi()
    {
        return new OpenAPI()
                .info(new Info().title("cloud2024")
                        .description("通用设计rest")
                        .version("v1.0"))
                .externalDocs(new ExternalDocumentation()
                        .description("www.hhf.com")
                        .url("https://yiyan.baidu.com/"));
    }
}

3.调试方式

http://localhost:8001/swagger-ui/index.html

1.5优化

1.完善日期时间格式

可以在相应类的属性上面使用@JsonFormat注解

@Column(name = "create_time")
    @Schema(title = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;

    @Column(name = "update_time")
    @Schema(title = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date updateTime;

如果是Spring Boot项目,也可以在application.yml文件中指定

spring:
	jackson:
		date-format:yyyy-MM-dd HH:mm:ss
		time-zone: GMT+8

2.统一返回值

思路:定义返回标准格式,3大标配

code状态值:由后端统一定义各种返回结果的状态码

message描述:本次接口调用的结果描述

data数据:本次返回的数据

扩展:接口调用时间之类,timestamp:接口调用时间

步骤:

1.新建枚举类ResturnCodeEnmu

HTTP请求返回状态码

ReturnCodeEnum

package com.atguigu.cloud.resp;

import lombok.Getter;

import java.util.Arrays;

@Getter
public enum ReturnCodeEnum {
    RC999("999","操作xxx失败"),
    RC200("200", "success"),
    RC201("201", "服务器开启降级保护,请稍后再试"),
    RC202("202", "热点参数限流,请稍后再试"),
    RC203("203", "系统规则不满足要求,请稍后再试"),
    RC204("204", "授权规则不通过,请稍后再试"),
    RC403("403", "无访问权限,请联系管理员授予权限"),
    RC401("401", "匿名用户访问无权限资源时的异常"),
    RC404("404", "404页面找不到的异常"),
    RC500("500", "系统异常请稍后再试"),
    RC375("375", "数学运算异常,请稍后再试"),
    INVALID_YOKEN("2001","访问令牌不合法"),
    ACCESS_DENIED("2003","没有权限访问该资源"),
    CLIENT_AUTHENTICATION_FAILED("1001","客户端认证失败"),
    USERNAME_OR_PASSWORD_ERROE("1002","用户名或密码错误"),
    BUSINESS_ERROR("1004","业务逻辑异常"),
    UNSUPPORTED_GRANT_TYPE("1003","不支持的认证模式");


    private final String code;
    private final String message;

    ReturnCodeEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 如何定义一个通用的枚举类
     * 举值-构造-遍历
     */

    
    //传统版
    //3.1
    public static ReturnCodeEnum getReturnCodeEnum(String code){
        for (ReturnCodeEnum element : ReturnCodeEnum.values()) {
            if(element.getCode().equalsIgnoreCase(code)){
                return element;
            }
        }
        return  null;
    }
    
    //3.2Stream流式计算
    public static ReturnCodeEnum getReturnEnum1(String code){
        return Arrays.stream(ReturnCodeEnum.values()).filter(x -> x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null);
    }   


}

2.新建统一定义返回对象ResultData

1.6全局异常处理

为什么需要全局异常处理器,不在手写try...catch

新建全局异常类GlobalExecptionHandler

package com.atguigu.cloud.exp;


import com.atguigu.cloud.resp.ResultData;
import com.atguigu.cloud.resp.ReturnCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice
public class GlobalExexptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultData<String> execption(Exception e){
        System.out.println("####come in GlobalExecptionHandler");
        log.error("全局异常信息:{}",e.getMessage(),e);
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());
    }                                                                                                                                                                                        
}
    @GetMapping(value =  "/pay/error")
    public ResultData<Integer> getPayError(){
        Integer i = Integer.valueOf(200);
        try{
            System.out.println("com in payerror test");
            int age = 10/0;
        }catch (Exception e){
            return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());
        }
        return ResultData.success(i);
    }

springcloud-netflix是一个基于Spring Cloud的微服务框架。它提供了一系列工具和组件来简化开发和管理分布式系统的任务。其中包括Eureka、Feign和Zuul等组件。 在搭建springcloud-netflix项目时,需要创建父工程和子工程。父工程是springcloud-netflix-parent,子工程可以是springcloud-netflix-eureka、springcloud-netflix-service-pay等。每个子工程都需要在pom.xml文件中导入相应的依赖。 对于springcloud-netflix-eureka,需要导入spring-cloud-starter-netflix-eureka-server和spring-cloud-starter-netflix-eureka-client等依赖。此外,还需要配置相关的类。 对于springcloud-netflix-service-pay,需要导入spring-cloud-starter-netflix-eureka-client、spring-boot-starter-web和spring-cloud-starter-openfeign等依赖。同样,也需要配置相关的类。 对于Zuul,它是一个API Gateway服务器,提供了动态路由、监控、弹性和安全等边缘服务的框架。在搭建Zuul时,需要导入spring-cloud-starter-netflix-eureka-client、spring-boot-starter-web和spring-cloud-starter-netflix-zuul等依赖。同时,需要配置开启Zuul。 总之,springcloud-netflix是一个基于Spring Cloud的微服务框架,包括了Eureka、Feign和Zuul等组件,可以帮助简化开发和管理分布式系统的任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringCloudNetflix](https://blog.youkuaiyun.com/Exist_W/article/details/131867868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值