滴滴公司面试经验,kubebuilder实战之七,【聊透SpringMVC

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.yaml

  • 上述操作完成后会新建很多资源,如namespace、rbac、pod等,以pod为例如下:

[root@hedy ~]# kubectl get pods --all-namespaces

NAMESPACE NAME READY STATUS RESTARTS AGE

cert-manager cert-manager-6588898cb4-nvnz8 1/1 Running 1 5d14h

cert-manager cert-manager-cainjector-7bcbdbd99f-q645r 1/1 Running 1 5d14h

cert-manager cert-manager-webhook-5fd9f9dd86-98tm9 1/1 Running 1 5d14h

  • 操作完成后,准备工作结束,可以开始实战了;

生成webhook

  • 进入elasticweb工程下,执行以下命令创建webhook:

kubebuilder create webhook \

–group elasticweb \

–version v1 \

–kind ElasticWeb \

–defaulting \

–programmatic-validation

  • 上述命令执行完毕后,先去看看main.go文件,如下图红框1所示,自动增加了一段代码,作用是让webhook生效:

在这里插入图片描述

  • 上图红框2中的elasticweb_webhook.go就是新增文件,内容如下:

package v1

import (

“k8s.io/apimachinery/pkg/runtime”

ctrl “sigs.k8s.io/controller-runtime”

logf “sigs.k8s.io/controller-runtime/pkg/log”

“sigs.k8s.io/controller-runtime/pkg/webhook”

)

// log is for logging in this package.

var elasticweblog = logf.Log.WithName(“elasticweb-resource”)

func (r *ElasticWeb) SetupWebhookWithManager(mgr ctrl.Manager) error {

return ctrl.NewWebhookManagedBy(mgr).

For®.

Complete()

}

// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!

// +kubebuilder:webhook:path=/mutate-elasticweb-com-bolingcavalry-v1-elasticweb,mutating=true,failurePolicy=fail,groups=elasticweb.com.bolingcavalry,resources=elasticwebs,verbs=create;update,versions=v1,name=melasticweb.kb.io

var _ webhook.Defaulter = &ElasticWeb{}

// Default implements webhook.Defaulter so a webhook will be registered for the type

func (r *ElasticWeb) Default() {

elasticweblog.Info(“default”, “name”, r.Name)

// TODO(user): fill in your defaulting logic.

}

// TODO(user): change verbs to “verbs=create;update;delete” if you want to enable deletion validation.

// +kubebuilder:webhook:verbs=create;update,path=/validate-elasticweb-com-bolingcavalry-v1-elasticweb,mutating=false,failurePolicy=fail,groups=elasticweb.com.bolingcavalry,resources=elasticwebs,versions=v1,name=velasticweb.kb.io

var _ webhook.Validator = &ElasticWeb{}

// ValidateCreate implements webhook.Validator so a webhook will be registered for the type

func (r *ElasticWeb) ValidateCreate() error {

elasticweblog.Info(“validate create”, “name”, r.Name)

// TODO(user): fill in your validation logic upon object creation.

return nil

}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type

func (r *ElasticWeb) ValidateUpdate(old runtime.Object) error {

elasticweblog.Info(“validate update”, “name”, r.Name)

// TODO(user): fill in your validation logic upon object update.

return nil

}

// ValidateDelete implements webhook.Validator so a webhook will be registered for the type

func (r *ElasticWeb) ValidateDelete() error {

elasticweblog.Info(“validate delete”, “name”, r.Name)

// TODO(user): fill in your validation logic upon object deletion.

return nil

}

  • 上述代码有两处需要注意,第一处和填写默认值有关,如下图:

在这里插入图片描述

  • 第二处和校验有关,如下图:

在这里插入图片描述

  • 咱们要实现的业务需求就是通过修改上述elasticweb_webhook.go的内容来实现,不过代码稍后再写,先把配置都改好;

开发(配置)

  • 打开文件config/default/kustomization.yaml,下图四个红框中的内容原本都被注释了,现在请将注释符号都删掉,使其生效:

在这里插入图片描述

  • 还是文件config/default/kustomization.yaml,节点vars下面的内容,原本全部被注释了,现在请全部放开,放开后的效果如下图:

在这里插入图片描述

  • 配置已经完成,可以编码了;

开发(编码)

  • 打开文件elasticweb_webhook.go

  • 新增依赖:

apierrors “k8s.io/apimachinery/pkg/api/errors”

  • 找到Default方法,改成如下内容,可见代码很简单,判断TotalQPS是否存在,若不存在就写入默认值,另外还加了两行日志:

func (r *ElasticWeb) Default() {

elasticweblog.Info(“default”, “name”, r.Name)

// TODO(user): fill in your defaulting logic.

// 如果创建的时候没有输入总QPS,就设置个默认值

if r.Spec.TotalQPS == nil {

r.Spec.TotalQPS = new(int32)

*r.Spec.TotalQPS = 1300

elasticweblog.Info(“a. TotalQPS is nil, set default value now”, “TotalQPS”, *r.Spec.TotalQPS)

} else {

elasticweblog.Info(“b. TotalQPS exists”, “TotalQPS”, *r.Spec.TotalQPS)

}

}

  • 接下来开发校验功能,咱们把校验功能封装成一个validateElasticWeb方法,然后在新增和修改的时候各调用一次,如下,可见最终是调用apierrors.NewInvalid生成错误实例的,而此方法接受的是多个错误,因此要为其准备切片做入参,当然了,如果是多个参数校验失败,可以都放入切片中:

func (r *ElasticWeb) validateElasticWeb() error {

var allErrs field.ErrorList

if *r.Spec.SinglePodQPS > 1000 {

elasticweblog.Info(“c. Invalid SinglePodQPS”)

err := field.Invalid(field.NewPath(“spec”).Child(“singlePodQPS”),

*r.Spec.SinglePodQPS,

“d. must be less than 1000”)

allErrs = append(allErrs, err)

return apierrors.NewInvalid(

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

va多线程学习手册)+(计算机网络顶级教程)等学习资源

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
***VC项目中,可以通过编写配置文件来实现具体的实战。首先,在SpringMVC的配置文件中,可以通过`<mvc:interceptors>`标签配置拦截器。拦截器可以用于在请求处理之前或之后执行一些操作,比如验证用户权限、记录日志等。在配置文件中,可以通过`<mvc:interceptor>`标签定义一个拦截器,并使用`<mvc:mapping>`标签指定拦截器的作用路径,使用`<mvc:exclude-mapping>`标签指定不需要拦截的路径。最后,需要在`<mvc:interceptors>`标签内将拦截器配置为一个bean。 此外,在SpringMVC中,可以使用`@Controller`注解标记一个类为SpringMVC的Controller对象。Controller对象负责处理请求,并将结果返回给客户端。可以使用`@RequestMapping`注解来指定处理请求的路径。另外,还可以使用其他注解来处理请求参数、处理响应、处理异常等。 综上所述,一个实战SpringMVC项目可以包括以下步骤: 1. 创建一个SpringMVC的配置文件,并在配置文件中配置拦截器。 2. 创建一个Controller类,并使用`@Controller`注解标记。 3. 在Controller类中使用`@RequestMapping`注解指定处理请求的路径。 4. 可以使用其他注解来处理请求参数、处理响应、处理异常等。 5. 部署项目并启动服务器,然后可以通过浏览器发送请求来测试项目的功能。 通过以上步骤,可以实现一个简单的SpringMVC项目,并进行实战开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringMVC 实战](https://blog.csdn.net/qq_42588990/article/details/121076564)[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_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值