极客时间SpringCloud微服务项目实战课程的学习总结1

04.如何搭建优惠券模板服务 04.如何搭建优惠券服务 阅读详情

1、SpringBoot项目的pom.xml文件中标签说明:

<!-- 已省略部分标签,完整内容请参考项目源代码 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.2</version>
</parent>
<groupId>com.geekbang</groupId>
<artifactId>geekbang-coupon</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>coupon-template-serv</module>
    <module>coupon-calculation-serv</module>
    <module>coupon-customer-serv</module>
    <module>middleware</module>
</modules>
<dependencyManagement>
    <dependencies>
       <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.0</version>
       </dependency>
    <!-- 省略部分依赖项 -->
    </dependencies>
</dependencyManagement>
  • 1)< parent > 标签
    在 parent 标签中我们指定了 geekbang-coupon 项目的“父级依赖”为 spring-boot-starter-parent,这样一来,spring-boot-starter-parent 里定义的 Spring Boot 组件版本信息就会被自动带到子模块中。这种做法也是大多数 Spring Boot 项目的通用做法,不仅降低了依赖项管理的成本,也不需要担心各个组件间的兼容性问题。
  • 2)< packaging > 标签
    maven 的打包类型有三种:jar、war 和 pom。
    当我们指定 packaging 类型为 pom 时,意味着当前模块是一个“boss”,它只用关注顶层战略,即定义依赖项版本和整合子模块,不包含具体的业务实现。
  • 3)< dependencymanagement > 标签
    这个标签的作用和 < parent > 标签类似,两者都将版本信息向下传递。
    dependencymanagement 是 boss 们定义顶层战略的地方,我们可以在这里定义各个依赖项的版本,当子项目需要引入这些依赖项的时候,只用指定 groupId 和 artifactId 即可,不用管 version 里该写哪个版本。

2、微服务项目中的公共模块

  • 在微服务项目中,通常会将子模块中都用到的实体类提取出来,形成一个公共模块(api模块),在其他子模块需要使用公共模块中的实体类时,只需要通过<module> 标签导入公共模块即可。

  • coupon-template-api 公共模块是专门用来存放公共类的仓库,我把 REST API 接口的服务请求和服务返回对象的 POJO 类放到了里面。在微服务领域,将外部依赖的 POJO 类或者 API 接口层单独打包是一种通用做法,这样就可以给外部依赖方提供一个“干净”(不包含非必要依赖)的接口包,为远程服务调用(RPC)提供支持。

  • 在 公共模块的 pom 文件中,只需要添加了少量的“工具类”依赖,比如 lombok、guava 和 validation-api 包等通用组件,这些工具类用来帮助我们自动生成代码并提供一些便捷的功能特性。

3、防御性编程

定义一个用来表示优惠券类型的 enum 对象, CouponType。

@Getter
@AllArgsConstructor
public enum CouponType {

    UNKNOWN("unknown", "0"),
    MONEY_OFF("满减券", "1"),
    DISCOUNT("打折", "2"),
    RANDOM_DISCOUNT("随机减", "3"),
    LONELY_NIGHT_MONEY_OFF("寂寞午夜double券", "4"),
    ANTI_PUA("PUA加倍奉还券", "5");

    private String description;

    // 存在数据库里的最终code
    private String code;

    public static CouponType convert(String code) {
        return Stream.of(values())
                .filter(couponType -> couponType.code.equalsIgnoreCase(code))
                .findFirst()
                .orElse(UNKNOWN);
    }
}
  • CouponType 类定义了多个不同类型的优惠券,convert 方法可以根据优惠券的编码返回对应的枚举对象。这里还有一个“Unknown”类型的券,它专门用来对付故意输错 code 的恶意请求。
  • 在实际的开发工作中,必须要认为,所有需要用户输入的信息都是不可靠的,并且需要对各种意外输入做拦截、防范,这就是“防御性编程”的思维。

4、lombok注解、表示金额的数据类型

创建两个用来定义优惠券模板规则的类,分别是 TemplateRule 和 Discount。

  • TemplateRule 包含了两个规则,一是领券规则,包括每个用户可领取的数量和券模板的过期时间(TemplateRule );二是券模板的计算规则(Discount )。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 优惠券计算规则
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TemplateRule {

    /** 可以享受的折扣 */
    private Discount discount;

    // 每个人最多可以领券数量
    private Integer limitation;

    // 过期时间
    private Long deadline;

}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Discount {

    // 满减 - 减掉的钱数
    // 折扣 - 90 = 9折,  95=95折
    private Long quota;

    // 最低达到多少消费才能用
    private Long threshold;
}
  • 注意:应该Long 来表示“金额”,对于境内电商行业来说,金额往往是以分为单位的,这样我们可以直接使用 Long 类型参与金额的计算,比如 100 就代表 100 分,也就是一块钱。这比使用 Double 到处转换 BigDecimal 省了很多事儿。

5、SpringDataJPA的常用注解

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
@EntityListeners(AuditingEntityListener.class)
@Table(name = "coupon_template")
public class CouponTemplate implements Serializable {

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

    // 状态是否可用
    @Column(name = "available", nullable = false)
    private Boolean available;

    @Column(name = "name", nullable = false)
    private String name;

    // 适用门店-如果为空,则为全店满减券
    @Column(name = "shop_id")
    private Long shopId;

    @Column(name = "description", nullable = false)
    private String description;

    // 优惠券类型
    @Column(name = "type", nullable = false)
    @Convert(converter = CouponTypeConverter.class)
    private CouponType category;

    // 创建时间,通过@CreateDate注解自动填值(需要配合@JpaAuditing注解在启动类上生效)
    @CreatedDate
    @Column(name = "created_time", nullable = false)
    private Date createdTime;

    // 优惠券核算规则,平铺成JSON字段
    @Column(name = "rule", nullable = false)
    @Convert(converter = RuleConverter.class)
    private TemplateRule rule;

}

在 CouponTemplate 上,我们运用了 javax.persistence 包和 Spring JPA 包的标准注解,对数据库字段进行了映射,我挑几个关键注解说道一下。

Entity:声明了“数据库实体”对象,它是数据库 Table 在程序中的映射对象;
Table:指定了 CouponTemplate 对应的数据库表的名称;ID/GeneratedValue:ID 注解将某个字段定义为唯一主键,GeneratedValue 注解指定了主键生成策略;
Column:指定了每个类属性和数据库字段的对应关系,该注解还支持非空检测、对 update 和 create 语句进行限制等功能;
CreatedDate:自动填充当前数据的创建时间;
Convert:如果数据库中存放的是 code、string、数字等等标记化对象,可以使用 Convert 注解指定一个继承自 AttributeConverter 的类,将 DB 里存的内容转化成一个 Java 对象

  • JPA 也支持一对多、多对多的级联关系(ManyToOne、OneToOne 等注解),但是在项目中不推荐使用,原因是这些注解背后有很多隐患。过深的级联层级所带来的 DB 层压力可能会在洪峰流量下被急剧放大,而 DB 恰恰是最不抗压的一环。
  • 所以,我们很少在一些一二线大厂的超高并发项目中看到级联配置的身影。我的经验是尽可能减少级联配置,用单表查询取而代之,如果一个查询需要 join 好几张表,最好的做法就通过重构业务逻辑来简化 DB 查询的复杂度。

6、接口名查询操作的命名规则

  • 定义 DAO 的地方,可以借助 Spring Data 的强大功能,我们只通过接口名称就可以声明一系列的 DB 层操作。
public interface CouponTemplateDao
        extends JpaRepository<CouponTemplate, Long> {

    // 根据Shop ID查询出所有券模板
    List<CouponTemplate> findAllByShopId(Long shopId);

    // IN查询 + 分页支持的语法
    Page<CouponTemplate> findAllByIdIn(List<Long> Id, Pageable page);

    // 根据shop ID + 可用状态查询店铺有多少券模板
    Integer countByShopIdAndAvailable(Long shopId, Boolean available);

    // 将优惠券设置为不可用
    @Modifying
    @Query("update CouponTemplate c set c.available = 0 where c.id = :id")
    int makeCouponUnavailable(@Param("id") Long id);
}
  • 在 CouponTemplateDao 所继承的 JpaRepository 类中,这个父类就像一个百宝箱,内置了各种各样的数据操作方法。我们可以通过内置的 save 方法完成对象的创建和更新,也可以使用内置的 delete 方法删除数据。

  • 在 CouponTemplateDao 中,第一个方法 findAllByShopId 就是通过接口名查询的例子,jpa 使用了一种约定大于配置的思想,你只需要把要查询的字段定义在接口的方法名中,在你发起调用时后台就会自动转化成可执行的 SQL 语句。

  • 方法名的过程需要遵循 < 起手式 >By< 查询字段 >< 连接词 > 的结构。

起手式:以 find 开头表示查询,以 count 开头表示计数;
查询字段:字段名要保持和 Entity 类中定义的字段名称一致;
连接词:每个字段之间可以用 And、Or、Before、After 等一些列丰富的连词串成一个查询语句

  • 以接口名查询的方式在面对复杂查询时,容易导致接口名称过长,以及维护起来也挺吃力的。所以,对于复杂查询,我们可以使用自定义 SQL、或者 Example 对象查找的方式。

7、JPA的复杂查询

  • 关于自定义 SQL,你可以参考上面CouponTemplateDao 中的 makeCouponUnavailable 方法,我将 **SQL 语句定义在了 Query 注解中,**通过参数绑定的方式从接口入参处获取查询参数,这种方式是最接近 SQL 编码的 CRUD 方式。
  • Example 查询的方式也很简单,构造一个 CouponTemplate 的对象,将你想查询的字段值填入其中,做成一个查询模板,调用 Dao 层的 findAll 方法即可,这里留给你自己动手验证。
couponTemplate.setName("查询名称");
templateDao.findAll(Example.of(couponTemplate));

8、全局配置文件和启动类

  • application.yml
# 项目的启动端口
server:
  port: 20000
  error:
    include-message: always

spring:
  application:
    # 定义项目名称
    name: coupon-template-serv
  datasource:
    # mysql数据源
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/geekbang_coupon_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 连接池
    hikari:
      pool-name: GeekbangCouponHikari
      connection-timeout: 5000
      idle-timeout: 30000
      maximum-pool-size: 10
      minimum-idle: 5
      max-lifetime: 60000
      auto-commit: true
  jpa:
    show-sql: true
    hibernate:
      # 在生产环境全部为none,防止ddl结构被自动执行
      ddl-auto: none
    properties:
      hibernate.format_sql: true
      hibernate.show_sql: true
    open-in-view: false

logging:
  level:
    com.broadview.coupon: debug
  • 启动类
@SpringBootApplication
@EnableJpaAuditing
@ComponentScan(basePackages = {"com.geekbang"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • SpringBootApplication 注解会自动开启包路径扫描,并启动一系列的自动装配流程(AutoConfig)。在默认情况下,Spring Boot 框架会扫描启动类所在 package 下的所有类,并在上下文中创建受托管的 Bean 对象,如果我们想加载额外的扫包路径,只用添加 ComponentScan 注解并指定 path 即可。
企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程 本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。 阅读详情

相关推荐

特征模理论指导滤波天线设计的优势和方法

本文探讨了特征模理论在滤波天线设计中的应用优势和方法。特征模理论通过分析天线结构的本征模特性,突破了传统经验设计的局限,实现了辐射与滤波功能的一体化设计。文章重点阐述了如何利用模式显著性(MS)和模式加权系数(MWC)来指导辐射零点的产生,揭示了辐射零点形成的物理机制。通过特征模分析,设计师可以明确调控天线结构和馈电系统,优化滤波性能。这种方法为现代多频/宽带滤波天线设计提供了理论依据和实用工具,显著提升了设计效率和性能指标。

qq_64207806的博客 957

构建微服务技术中台,SpringCloud和Kubernetes该如何选型?【最优:Kubernetes+Nacos+SpringBoot,不用SpringCloud】

在此基础上,波波会有自己的个人倾向,波波比较看重两点,一个是社区生态,毕竟随大流比走冷门要轻松很多,另外一个是对微服务公共关注点考虑的全面性,我不想自己再花费精力去解决自动化发布等繁琐的事情。综上,我比较倾向K8s平台+SpringBoot框架,这两个是目前社区的绝对主流,可以用如日中天来形容,K8s是针对微服务公共关注点最完备的解决方案,服务框架我倾向直接用SpringBoot,我不需要SpringCloud那套,因为它支持的功能K8s已经覆盖了很大部分。

u013250861的博客 2376

【PLL】分频器设计权衡:从CMOS到CML的电路实现与优化

本文深入探讨了PLL中分频器的设计权衡,比较了CMOS和CML两种电路实现的优缺点。通过实际案例分析,展示了如何在速度、功耗和噪声之间取得平衡,特别是在5G射频芯片和Wi-Fi 6E等高频应用中的优化实践。文章还提供了混合架构设计和电源噪声协同优化的实用技巧,适合电路设计工程师参考。

weixin_42521843的博客 443

Hibernate AttributeConverter 可支持的最小 Number 转换

Hibernate AttributeConverter<X,Y> 可支持的最小 Number 转换

Geek Feleon 480

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南

本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。

weixin_29190573的博客 326

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 287

极客时间推荐学习笔记

1、推荐系统可以把那些最终会在用户(User)和物品(Item)之间产生的连接提前找出来。 2、显式反馈:用户评分 ​ 隐式反馈:用户行为,如点击、浏览等 ​ 1、数据比显式反馈更加稠密。诚然,评分数据总体来说是很稀疏的。 ​ 2、隐式反馈更代表用户的真实想法,比如你不是很赞成川普的观点,但还是想经常看到他的内容(以便吐槽他),这是显式反馈无法捕捉… ​ 3、隐式反馈常常和模型的目标函...

weixin_44070747的博客 1016

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

从0开始构建SpringCloud微服务(1)

照例附上项目github链接 本项目实现的是将一个简单的天气预报系统一步一步改造成一个SpringCloud微服务系统的过程,第一节将介绍普通天气预报系统的简单实现。 数据来源: 数据来源1:http://wthrcdn.etouch.cn/weather_mini?city=深圳 数据来源2:http://wthrcdn.etouch...

weixin_34283445的博客 195

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6637

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5805

深入学习微服务架构

同样是笔记摘录自---极客时间 李运华 《从0开始学架构》。 1、微服务和SOA比较 因为两者互相联系、互相区别。首先要区分出来。流行观点有:a、微服务是SOA的一种实现形式;b、微服务是SOA去掉ESB,就是一种轻量级的SOA;c、两者是看起来相似实质上有本质不同的架构模式。 前面博客里面,王磊的笔记有记录,他的观点是a。但本文作者理解是:SOA是基于解决企业的...

Leonardo的博客 737

彻底讲透 SAP 中的 client-safe:从 CDS、AMDP 到 ABAP Cloud 的客户端隔离设计

SAP系统中的client-safe概念定义了技术边界:访问client-dependent数据的对象必须确保只看到单个client数据,而访问client-independent数据的对象则天然满足条件。这一原则直接影响CDS视图、AMDP等核心组件,并与ABAP Cloud开发模型紧密集成。在业务系统中,client isolation要求用户只能看到当前登录client的数据。SAP通过语言版本、对象规则和静态检查强制执行这一约束,特别是在ABAP Cloud开发中,AMDP方法和发布的API必须满足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3265

Java程序员的Spring学习指南!

前言只有光头才能变强Spring「春天」来啦!一、回顾Spring随着Spring的更新,Spring"越来越大"了,我们想要学的东西,Spring几乎都有解决方案。Sp...

3y 1115

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

探索Spring Family:一款全栈开发者的技术盛宴

在当今快速发展的软件开发领域,全栈开发者面临着前所未有的技术挑战。从数据库操作到Web界面,从单体应用到微服务架构,从本地部署到云原生环境,技术栈的广度和深度都在不断扩展。而Spring Family作为Java生态系统中最成熟、最全面的技术框架集合,为全栈开发者提供了一站式的解决方案。 本文将带你深入探索Spring Family技术栈,通过实际项目案例解析,帮助你掌握从基础到高级的全栈开发技...

gitblog_00097的博客 922

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2018年中IT好课盘点 速来围观百万学员的口碑课程

信息爆炸、资源泛滥,如何在网络上选择适合自己的技能资源并不是一件简单的事情。比如我想学习Python,但是一搜索,会出现上百万条这方面的资源,而真正适合自己的,可能就那么一两个。有时候,程序员既浪费了时间,还没有找到优质地资源。在日常工作中,我们也会发现,优秀的程序员会定期整理自己的知识库,对自己已有的资源进行归纳整理,时间允许还会分享到网络上,比如Java图书资源集锦、XXX框架案例等等。这些资...

优快云学习 5199

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

官方给大家送福利了,这么多优秀的课程可以提升自己的能力

大家的都知道,优快云是国内优秀的程序员开发者技术博客社区,这几年,优快云已经从原来的博客社区,逐渐开始发展【直播】-【课程】-【个人IP】等等,因为我们看到后台的功能越来越完善,相对其它博客社区,我觉得优快云的功能是目前最丰富的。相信在不久的将来,优快云博客会成为国内数一数二的技术社区,不对,是程序员全面发展的社区 官方也会经常找我们这些优质的博主内测一些功能,我们也会积极的帮助他们提出很多的意见。这几天官方推出了许多优质的课程,已经在追赶极客时间了,我也觉得,随着优质的技术者入驻,在课程这一块,

小小鱼儿小小林的博客 1024

Java面试题库,极客时间百度云盘百度网盘

一、基础知识 比较简单的一些基础入门: 二、微服务构建:Spring boot 三、服务治理:Spring Cloud Euraka 四、客户端负载均衡:Spring Cloud Ribbon 五、服务器容错保护:Spring Cloud Hystrix 六、声明式服务调用:Spring Cloud Feign 七、API网关服务:Spring Cloud Zuul 八、分布式配置中心:Spring Cloud Config 九、消息总件:Spring Cloud Bus 十、消息驱动的微

m0_57081438的博客 3204

推荐一门付费的 Spring 视频课

阅读文本大概需要 5 分钟。前言:毋庸置疑,Spring 早已成为 Java 后端开发事实上的行业标准,无数的公司选择 Spring 作为基础的开发框架,大部分Java ...

公众号:Java后端 717

你的微服务实践还顺利吗?

过去的一年,Spring Boot、Spring Cloud、微服务霸占了各个媒体平台、线下活动的大量版面。不论大公司还是小公司、互联网行业还是传统行业,都试图在自己的科...

程序猿DD 727

Seata支持微服务框架的核心原理分析

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。

huxian1234的专栏 1294

深入Spring,你不得不知的那些事!

Java,是目前后端技术栈最流行的语言。Spring,又是Java技术栈默认的行业预标准:无数公司选择Spring作为基础开发框架大部分Java后端工程师都会用到Spri...

架构师之路 657

轻谈SpringCloud

SpringCloud是什么 SpringCloud在英文意思是"云",常代指为分布式开发,是一套解决"三高"(高可用、)问题的组合拳。 SpringCloud组件库选择 SpringCluod版本策略

会写代码的斯皮尔伯格 648

熬夜肝了一份 spring 避坑指南,收藏起来!

大家好,我是坤哥。Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC、SpringBoot、SpringData、SpringCloud、Spring Clo...

weixin_41385912的博客 332

Spring Boot、Spring Cloud 学习资源

【官方文档】Spring Boot 官方文档,总览、新特性、快速开始、讨论与视频、当前最新稳定版 2.2.6.RELEASE 单页面文档。 https://spring.io/projects/spring-boot https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/htmlsingle/ 【github】纯洁的微笑Spring Boot 教程、技术栈示例代码,快速简单上手教程 https://github.com..

ConstXiong 244

如何从 0 到 1,搭建一个完整的 Kubernetes集群?

过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和 K8S 项目作为技术重心,试图“放长线钓大鱼”。就说阿里吧,目前基本所有业务都跑在云上,其中有一半已迁移到自己定制 Kubernetes 集群上。据说,今年计划完成 100% 基于 K8s 集群的业务部署。而服务网格这块儿,在阿里的一些部...

云原生实验室 269
上一篇: SpringBoot+Mybatis+Redis缓存实战总结
下一篇: 权限管理SpringSecurity Oauth2整合JWT实战总结(三)
咸鱼也有爱
博客等级 码龄7年 133粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值