极客时间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 即可。
如何在windows电脑上搭建Linux环境(手把手教安装虚拟机软件和使用云服务器) 手把手教学如何搭建Linux环境 阅读详情

相关推荐

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6267

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

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

u013250861的博客 2376

Python小波变换实战:用PyCWT分析气候数据(附完整代码)

本文详细介绍了如何使用Python中的PyCWT库进行小波变换分析,特别针对气候数据(如NINO3海温异常数据)的多尺度周期性特征提取。通过完整的代码示例,从数据预处理、小波参数配置到结果可视化,逐步指导读者掌握小波变换在气候研究中的实际应用。

weixin_29088655的博客 281

Hibernate AttributeConverter 可支持的最小 Number 转换

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

Geek Feleon 480

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1900

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 440

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

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

weixin_34283445的博客 195

Python爬虫实战:使用最新技术爬取路透社新闻数据

网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据和人工智能技术的发展,爬虫技术在数据采集、市场分析、舆情监控等领域发挥着越来越重要的作用。requests:同步HTTP请求库aiohttp:异步HTTP请求库:HTML解析库lxml:高效的HTML/XML解析库selenium:浏览器自动化工具playwright:现代浏览器自动化工具pandas:数据处理和分析库scrapy:专业的爬虫框架:生成随机User-Agentredis:缓存和分布式爬虫支持。

2201_76125261的博客 1204

极客时间推荐学习笔记

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

weixin_44070747的博客 1016

RTK_ROS_导航(4):接入move_base

现在我们要将之前的数据接入到Move_base中,使得机器人能够根据Map上的终点进行导航,并且实现避障效果如下图。

旋风小短腿 1947

【人工智能】国产开源大模型聊天 AquilaChat 快速开始上手实战&效果评测

Aquila语言大模型在技术上继承了GPT-3、LLaMA等的架构设计优点,替换了一批更高效的底层算子实现、重新设计实现了中英双语的tokenizer,升级了BMTrain并行训练方法,在Aquila的训练过程中实现了比Magtron+DeepSpeed zero-2将近8倍的训练效率。Aquila语言大模型是在中英文高质量语料基础上从0开始训练的,通过数据质量的控制、多种训练的优化方法,实现在更小的数据集、更短的训练时间,获得比其它开源模型更优的性能。

AI天才研究院 2万+

深入学习微服务架构

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

Leonardo的博客 737

MCU-内部flash模拟成EepRom(重新梳理)

通过fee写数据Data的过程中,数据会mapping一个虚拟地址,这个虚拟地址就是你的身份,在向flash写数据的过程中会写入很多相同虚拟地址的不同数据,在读取或切页的过程中,遍历数据只会认为最下面第一个的虚拟地址所持有的数据是有效数据,其他的都是老数据,可以丢弃。模拟成eeprom的两个eep_page写数据逻辑就是,先在eep_page0写数据,eep_page0写满后,将eep_page0的有效数据copy到eep_page1,之后擦eep_page0;

xiandang8023的博客 711

Java程序员的Spring学习指南!

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

3y 1115

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

gitblog_00097的博客 922

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

优快云学习 5199

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

大家的都知道,优快云是国内优秀的程序员开发者技术博客社区,这几年,优快云已经从原来的博客社区,逐渐开始发展【直播】-【课程】-【个人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、付费专栏及课程。

余额充值