云原生之容器编排实践-ruoyi-cloud项目部署到K8S:网关服务、认证服务与系统服务

news2024/11/18 23:31:12

背景

前面搭建好了 Kubernetes 集群与私有镜像仓库,终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手,按照 MySQLNacosRedisNginxGatewayAuthSystem 的顺序来部署 ruoyi-cloud 微服务应用。

部署一个服务前,需要明确它是有状态服务还是无状态服务,这里 MySQLNacosRedisNginx 当做有状态服务(StatefulSet)来部署;而 GatewayAuthSystem 这些微服务作为无状态服务(Deployment)来部署。

这一次对全部服务采用 YAML 文件的方式来进行部署,这有助于理解K8S组织管理资源的风格,后续我们可以借助开源的容器平台,eg: KubeSphere 来进行可视化的服务部署。不过,手动编写 YAML 文件有一个问题,那就是当面对较多的微服务时,工作量较大,基本成了体力活;有个好消息是,我们可以使用 Kubernetes 官方提供的 kompose 工具,实现对 dokcer-composeyamlK8Syaml 的转换。

另外,为了保证后续在实际生产环境下各组件的稳定与可靠,我们限定了所有基础镜像的版本。

  • MySQL: 8.0
  • Nacos: 2.2.3
  • Redis: 7.2.3
  • Nginx: 1.25.3

作为演示,这里仅部署网关服务、认证服务与系统服务这三个核心服务,有了这三个服务,配合 Nginx 代理的前端服务,便完成了 ruoyi-cloud 微服务项目的部署;与前面几个依赖服务( MySQLNacosRedis )不同的是:

  1. 基于若依自带的Dockerfile,对网关服务、认证服务与系统服务这3个服务进行构建;
  2. 用到了私有镜像仓库,将上一步得到的新Nginx镜像Push到私有镜像仓库,方便在K8S集群内部的不同实例之间进行镜像共享;
  3. 由于私有镜像仓库配置了认证信息,则在其他的节点拉取镜像时,需要配置 imagePullSecrets
  4. 网关服务、认证服务与系统服务以无状态服务(Deployment,方便进行弹性伸缩)来部署,仅在集群内部通信即可,无需暴露Service端口;此外也无需创建PV、PVC,没有数据持久化相关的配置。

虚机资源

共用到了三台虚机,1台作为 Master 节点,2台 Worker 节点。

主机名IP说明
k8s-master172.16.201.25主节点
k8s-node1172.16.201.26工作节点
k8s-node2172.16.201.27工作节点
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   37h   v1.20.9
k8s-node1    Ready    <none>                 35h   v1.20.9
k8s-node2    Ready    <none>                 35h   v1.20.9

系统环境

[root@k8s-master ~]# uname -a
Linux k8s-master 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@k8s-master ~]# cat /proc/version 
Linux version 3.10.0-1160.71.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 28 15:37:28 UTC 2022
[root@k8s-master ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

YAML转换

ruoyi-cloud 项目本身提供了一个使用 docker-compose 部署的配置文件以及所有依赖服务镜像的构建脚本,是在项目根目录的 docker 目录下,可参考Docker容器化部署若依微服务ruoyi-cloud项目。

先将这个 docker 目录上传到 Kubernetes 的主节点,然后使用 komposedokcer-composeyaml 转换为 K8Syaml

curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
chmod +x kompose
mv ./kompose /usr/local/bin/kompose
[root@k8s-master docker]# cd /opt/docker
[root@k8s-master docker]# kompose convert

对于自动转换后的 YAML ,我们做简单的修改后即可应用部署。这里就通过手动方式先创建 NameSpacekubectl create namespace ruoyi-service ,后续的无状态服务都部署到这个命名空间下。

  • ruoyi-gateway-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.26.0 (40646f47)
  labels:
    io.kompose.service: ruoyi-gateway
  name: ruoyi-gateway
  namespace: ruoyi-service
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: ruoyi-gateway
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.26.0 (40646f47)
      labels:
        io.kompose.service: ruoyi-gateway
    spec:
      imagePullSecrets:
        - name: ruoyi-registry-secret    
      containers:
        - image: 10.96.198.223:5000/ruoyi-gateway:1
          name: ruoyi-gateway
          ports:
            - containerPort: 8081
      restartPolicy: Always
  • ruoyi-auth-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.26.0 (40646f47)
  labels:
    io.kompose.service: ruoyi-auth
  name: ruoyi-auth
  namespace: ruoyi-service
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: ruoyi-auth
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.26.0 (40646f47)
      labels:
        io.kompose.service: ruoyi-auth
    spec:
      imagePullSecrets:
        - name: ruoyi-registry-secret           
      containers:
        - image: 10.96.198.223:5000/ruoyi-auth:2
          name: ruoyi-auth
          ports:
            - containerPort: 9200
      restartPolicy: Always
  • ruoyi-modules-system-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.26.0 (40646f47)
  labels:
    io.kompose.service: ruoyi-modules-system
  name: ruoyi-modules-system
  namespace: ruoyi-service
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: ruoyi-modules-system
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.26.0 (40646f47)
      labels:
        io.kompose.service: ruoyi-modules-system
    spec:
      imagePullSecrets:
        - name: ruoyi-registry-secret        
      containers:
        - image: 10.96.198.223:5000/ruoyi-module-system:1
          name: ruoyi-modules-system
          ports:
            - containerPort: 9201
      restartPolicy: Always

Note: 为了在不同的节点上可以拉取到镜像,需要配置:

    spec:
      imagePullSecrets:
        - name: ruoyi-registry-secret

部署自定义的无状态服务,基本的步骤为:

  1. 构建镜像并推送镜像到私有仓库;
  2. 应用上面编写的YAML,完成无状态服务部署;
  3. 验证服务是否成功启动。

Note: 对于每一个服务,记得修改 bootstrap.ymlNacos 配置中心的服务连接信息:使用服务名访问

  • bootstrap.yml
    server-addr: ruoyi-nacos.ruoyi-basic:8848

  • Nacos配置中心

# 连接Redis
spring:
  redis:
    host: ruoyi-redis.ruoyi-basic
    port: 6379
    password: you-guess

# 连接数据库
            url: jdbc:mysql://ruoyi-mysql.ruoyi-basic:3306/ruoyi-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
            password: you-guess

部署网关服务

构建并推送镜像到私有仓库

将若依项目的 docker 目录上传虚机上,在 Dockerfile 所在目录执行 docker build -t 镜像名称:版本 .

# 登录至私有镜像仓库
docker login -uusername -ppassword 10.96.198.223:5000

# 构建镜像
[root@k8s-master gateway]# docker build -t ruoyi-gateway:1 .

# 打标签
[root@k8s-master gateway]# docker tag ruoyi-gateway:1 10.96.198.223:5000/ruoyi-gateway:1

# 推送至私有仓库
[root@k8s-master gateway]# docker push 10.96.198.223:5000/ruoyi-gateway:1

# 查看是否上传成功
[root@k8s-master gateway]# curl -u username:password http://10.96.198.223:5000/v2/_catalog
{"repositories":["hello-world","ruoyi-gateway","ruoyi-nginx"]}

应用YAML文件

# 部署gateway
[root@k8s-master gateway]# kubectl apply -f ruoyi-gateway-deployment.yaml 
deployment.apps/ruoyi-gateway created

# 查看所有Pod,gateway就绪
[root@k8s-master gateway]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS             RESTARTS   AGE
default                busybox                                      1/1     Running            24         23h
docker-registry        docker-registry-9bc898786-l477q              1/1     Running            2          2d3h
kube-system            calico-kube-controllers-577f77cb5c-hv29w     1/1     Running            3          5d7h
kube-system            calico-node-4fkrs                            1/1     Running            2          5d7h
kube-system            calico-node-d4tqq                            1/1     Running            3          5d7h
kube-system            calico-node-sdmm6                            1/1     Running            6          5d7h
kube-system            coredns-9545f45dc-tf9wd                      1/1     Running            1          22h
kube-system            etcd-k8s-master                              1/1     Running            10         6d18h
kube-system            kube-apiserver-k8s-master                    1/1     Running            10         6d18h
kube-system            kube-controller-manager-k8s-master           1/1     Running            10         6d18h
kube-system            kube-proxy-4789z                             1/1     Running            2          6d18h
kube-system            kube-proxy-7mt7k                             1/1     Running            6          6d18h
kube-system            kube-proxy-lqtpz                             1/1     Running            3          6d18h
kube-system            kube-scheduler-k8s-master                    1/1     Running            11         6d18h
kubernetes-dashboard   dashboard-metrics-scraper-79c5968bdc-j9bnv   1/1     Running            3          5d7h
kubernetes-dashboard   kubernetes-dashboard-658485d5c7-pq7z8        1/1     Running            2          5d7h
ruoyi-basic             ruoyi-mysql-8c779d94c-b7r9n                   1/1     Running            1          33h
ruoyi-basic             ruoyi-nacos-0                                 1/1     Running            1          22h
ruoyi-basic             ruoyi-nginx-0                                 1/1     Running   		   13         44m
ruoyi-basic             ruoyi-redis-0                                 1/1     Running            0          8h
ruoyi-service           ruoyi-gateway-664795d7d-xrfqz                 1/1     Running            0          84s

# 配置文件没改动,单纯想重新运行
[root@k8s-master gateway]# kubectl rollout restart deployment ruoyi-gateway -n ruoyi-service
deployment.apps/ruoyi-gateway restarted

# 配置文件有改动,先删除
[root@k8s-master gateway]# kubectl delete -f ruoyi-gateway-deployment.yaml 
# 配置文件有改动,重新部署
[root@k8s-master gateway]# kubectl apply -f ruoyi-gateway-deployment.yaml 

验证网关服务

直接通过浏览器访问 Nacos 的服务列表,看有没有注册成功。

2024-03-10-Gateway.jpg

部署认证服务

构建并推送镜像到私有仓库

将若依项目的 docker 目录上传虚机上,在 Dockerfile 所在目录执行 docker build -t 镜像名称:版本 .

# 登录至私有镜像仓库
docker login -uusername -ppassword 10.96.198.223:5000

# 构建镜像
[root@k8s-master auth]# docker build -t ruoyi-auth:2 .

# 打标签
[root@k8s-master auth]# docker tag ruoyi-auth:2 10.96.198.223:5000/ruoyi-auth:2

# 推送至私有仓库
[root@k8s-master auth]# docker push 10.96.198.223:5000/ruoyi-auth:2

# 查看是否上传成功
[root@k8s-master auth]# curl -u username:password http://10.96.198.223:5000/v2/_catalog
{"repositories":["hello-world","ruoyi-auth","ruoyi-gateway","ruoyi-nginx"]}

应用YAML文件

# 部署auth
[root@k8s-master auth]# kubectl apply -f ruoyi-auth-deployment.yaml 
deployment.apps/ruoyi-auth created

# 调整副本数
[root@k8s-master auth]# kubectl scale deployment ruoyi-auth --replicas=2 -n ruoyi-service
[root@k8s-master auth]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
default                busybox                                      1/1     Running   452        18d
docker-registry        docker-registry-9bc898786-l477q              1/1     Running   2          19d
kube-system            calico-kube-controllers-577f77cb5c-hv29w     1/1     Running   3          23d
kube-system            calico-node-4fkrs                            1/1     Running   2          23d
kube-system            calico-node-d4tqq                            1/1     Running   3          23d
kube-system            calico-node-sdmm6                            1/1     Running   6          23d
kube-system            coredns-9545f45dc-tf9wd                      1/1     Running   1          18d
kube-system            etcd-k8s-master                              1/1     Running   10         24d
kube-system            kube-apiserver-k8s-master                    1/1     Running   10         24d
kube-system            kube-controller-manager-k8s-master           1/1     Running   10         24d
kube-system            kube-proxy-4789z                             1/1     Running   2          24d
kube-system            kube-proxy-7mt7k                             1/1     Running   6          24d
kube-system            kube-proxy-lqtpz                             1/1     Running   3          24d
kube-system            kube-scheduler-k8s-master                    1/1     Running   11         24d
kubernetes-dashboard   dashboard-metrics-scraper-79c5968bdc-j9bnv   1/1     Running   3          23d
kubernetes-dashboard   kubernetes-dashboard-658485d5c7-pq7z8        1/1     Running   2          23d
ruoyi-basic             ruoyi-mysql-8c779d94c-b7r9n                   1/1     Running   1          19d
ruoyi-basic             ruoyi-nacos-0                                 1/1     Running   1          18d
ruoyi-basic             ruoyi-nginx-0                                 1/1     Running   0          17d
ruoyi-basic             ruoyi-redis-0                                 1/1     Running   0          18d
ruoyi-service           ruoyi-auth-794bb8f5d4-kqt2m                   1/1     Running   0          11s
ruoyi-service           ruoyi-auth-794bb8f5d4-pxmxg                   1/1     Running   0          11s
ruoyi-service           ruoyi-gateway-664795d7d-xrfqz                 1/1     Running   0          17d

# 配置文件没改动,单纯想重新运行
[root@k8s-master auth]# kubectl rollout restart deployment ruoyi-auth -n ruoyi-service
deployment.apps/ruoyi-auth restarted

# 配置文件有改动,先删除
[root@k8s-master auth]# kubectl delete -f ruoyi-auth-deployment.yaml 
# 配置文件有改动,重新部署
[root@k8s-master auth]# kubectl apply -f ruoyi-auth-deployment.yaml 

验证认证服务

直接通过浏览器访问 Nacos 的服务列表,看有没有注册成功。

2024-03-10-Auth.jpg

部署系统服务

构建并推送镜像到私有仓库

将若依项目的 docker 目录上传虚机上,在 Dockerfile 所在目录执行 docker build -t 镜像名称:版本 .

# 登录至私有镜像仓库
docker login -uusername -ppassword 10.96.198.223:5000

# 构建镜像
[root@k8s-master system]# docker build -t ruoyi-module-system:1 .

# 打标签
[root@k8s-master system]# docker tag ruoyi-module-system:1 10.96.198.223:5000/ruoyi-module-system:1

# 推送至私有仓库
[root@k8s-master system]# docker push 10.96.198.223:5000/ruoyi-module-system:1

# 查看是否上传成功
[root@k8s-master system]# curl -u username:password http://10.96.198.223:5000/v2/_catalog
{"repositories":["hello-world","ruoyi-auth","ruoyi-gateway","ruoyi-module-system","ruoyi-nginx"]}

应用YAML文件

# 部署system
[root@k8s-master system]# kubectl apply -f ruoyi-modules-system-deployment.yaml 
deployment.apps/ruoyi-modules-system created

# 查看所有Pod,system就绪
[root@k8s-master system]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
default                busybox                                      1/1     Running   453        18d
docker-registry        docker-registry-9bc898786-l477q              1/1     Running   2          20d
kube-system            calico-kube-controllers-577f77cb5c-hv29w     1/1     Running   3          23d
kube-system            calico-node-4fkrs                            1/1     Running   2          23d
kube-system            calico-node-d4tqq                            1/1     Running   3          23d
kube-system            calico-node-sdmm6                            1/1     Running   6          23d
kube-system            coredns-9545f45dc-tf9wd                      1/1     Running   1          18d
kube-system            etcd-k8s-master                              1/1     Running   10         24d
kube-system            kube-apiserver-k8s-master                    1/1     Running   10         24d
kube-system            kube-controller-manager-k8s-master           1/1     Running   10         24d
kube-system            kube-proxy-4789z                             1/1     Running   2          24d
kube-system            kube-proxy-7mt7k                             1/1     Running   6          24d
kube-system            kube-proxy-lqtpz                             1/1     Running   3          24d
kube-system            kube-scheduler-k8s-master                    1/1     Running   11         24d
kubernetes-dashboard   dashboard-metrics-scraper-79c5968bdc-j9bnv   1/1     Running   3          23d
kubernetes-dashboard   kubernetes-dashboard-658485d5c7-pq7z8        1/1     Running   2          23d
ruoyi-basic             ruoyi-mysql-8c779d94c-b7r9n                   1/1     Running   1          19d
ruoyi-basic             ruoyi-nacos-0                                 1/1     Running   0          13m
ruoyi-basic             ruoyi-nginx-0                                 1/1     Running   0          17d
ruoyi-basic             ruoyi-redis-0                                 1/1     Running   0          18d
ruoyi-service           ruoyi-auth-794bb8f5d4-kqt2m                   1/1     Running   0          38m
ruoyi-service           ruoyi-auth-794bb8f5d4-pxmxg                   1/1     Running   0          38m
ruoyi-service           ruoyi-gateway-664795d7d-xrfqz                 1/1     Running   0          17d
ruoyi-service           ruoyi-modules-system-5f9f8dc5fc-lg7ts         1/1     Running   5          7m52s

# 配置文件没改动,单纯想重新运行
[root@k8s-master system]# kubectl rollout restart deployment ruoyi-modules-system -n ruoyi-service
deployment.apps/ruoyi-modules-system restarted

# 配置文件有改动,先删除
[root@k8s-master system]# kubectl delete -f ruoyi-modules-system-deployment.yaml 
# 配置文件有改动,重新部署
[root@k8s-master system]# kubectl apply -f ruoyi-modules-system-deployment.yaml 

验证系统服务

直接通过浏览器访问 Nacos 的服务列表,看有没有注册成功。

2024-03-10-System.jpg

小总结

本文介绍了如何将 ruoyi-cloud 项目部署到 Kubernetes 集群中,包括网关服务、认证服务和系统服务。首先,根据服务的特性将它们分为有状态服务和无状态服务,并采用 YAML 文件进行部署。通过 kompose 工具将 docker-compose 的配置转换为 Kubernetes 的配置,简化了部署过程,之后可以通过前面 Nginx 暴露的服务端口进行访问。

部署过程中,首先需要构建服务的 Docker 镜像,并将其推送到私有镜像仓库。为了在 Kubernetes 集群中的不同节点上拉取镜像,需要配置 imagePullSecrets 。接着,通过应用修改后的 YAML 文件来部署服务,并通过 kubectl 命令管理服务的部署状态。

部署的具体步骤包括:

  1. 构建服务的Docker镜像并推送到私有镜像仓库。
  2. 应用YAML文件,完成服务的部署。
  3. 验证服务是否成功注册到Nacos服务列表中。

此外,还需要注意修改服务配置文件中的 Nacos 配置中心的服务连接信息,确保服务能够正确连接到 NacosRedisMySQL 等依赖服务。

通过上述步骤,可以实现 ruoyi-cloud 项目的容器化部署和管理,利用 Kubernetes 的弹性伸缩和服务管理能力,提高服务的可用性和可维护性。


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】深入探究CentOS防火墙(Firewalld):基础概念、常用命令及实例操作

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Firewalld基础概念&#xff1a; Firewalld常用命令&#xff1a; 启动/停止/重启Firewalld服务&#xff1a; 查看Firewalld状态…

OpenStack之Glance

一、概述 Glance&#xff08;OpenStack Image Service&#xff09;是一个提供发现&#xff0c;注册&#xff0c;和下载镜像的服务。Glance 提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API&#xff0c;可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在…

【Java.mysql】——增删查改(CRUD)之 增查(CR) 附加数据库基础知识

目录 &#x1f6a9;数据库操作 &#x1f388;创建数据库 &#x1f388;使用数据库 &#x1f388;删除数据库 &#x1f6a9;数据类型 &#x1f6a9;表的操作 &#x1f388;创建表 &#x1f308;查看表结构 &#x1f388;删除表 ❗练习(综合运用) &#x1f5a5;️新增…

Linux文件与文件系统的压缩

文章目录 Linux文件与文件系统的压缩Linux系统常见的压缩命令gzip&#xff0c;zcat/zmore/zless/zgrepbzip2&#xff0c;bzcat/bzmore/bzless/bzgreppxz&#xff0c;xzcat/xzmore/xzless/xzgrepgzip&#xff0c;bzip2&#xff0c;xz压缩时间对比打包命令&#xff1a;tar打包命令…

三、实战篇 优惠券秒杀

源码仓库地址&#xff1a;gitgitee.com:chuangchuang-liu/hm-dingping.git 1、全局唯一ID 数据库默认自增的存在的问题&#xff1a; id增长规律明显受单表数据量的限制 场景一分析&#xff1a;id如果增长规律归于明显&#xff0c;容易被用户或者商业对手猜测出一些敏感信息&…

【JavaScript】JavaScript 变量 ① ( JavaScript 变量概念 | 变量声明 | 变量类型 | 变量初始化 | ES6 简介 )

文章目录 一、JavaScript 变量1、变量概念2、变量声明3、ES6 简介4、变量类型5、变量初始化 二、JavaScript 变量示例1、代码示例2、展示效果 一、JavaScript 变量 1、变量概念 JavaScript 变量 是用于 存储数据 的 容器 , 通过 变量名称 , 可以 获取 / 修改 变量 中的数据 ; …

C语言——函数指针——函数指针变量(详解)

函数指针变量 函数指针变量的作用 函数指针变量是指向函数的指针&#xff0c;它可以用来存储函数的地址&#xff0c;并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面&#xff1a; 回调函数&#xff1a;函数指针变量可以作为参数传递给其他函数&…

VBA_NZ系列工具NZ02:VBA读取PDF使用说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

C#MQTT编程10--MQTT项目应用--工业数据上云

1、文章回顾 这个系列文章已经完成了9个内容&#xff0c;由浅入深地分析了MQTT协议的报文结构&#xff0c;并且通过一个有效的案例让伙伴们完全理解理论并应用到实际项目中&#xff0c;这节继续上马一个项目应用&#xff0c;作为本系列的结束&#xff0c;奉献给伙伴们&#x…

AOP切面编程,以及自定义注解实现切面

AOP切面编程 通知类型表达式重用表达式切面优先级使用注解开发&#xff0c;加上注解实现某些功能 简介 动态代理分为JDK动态代理和cglib动态代理当目标类有接口的情况使用JDK动态代理和cglib动态代理&#xff0c;没有接口时只能使用cglib动态代理JDK动态代理动态生成的代理类…

Autosar教程-Mcal教程-GPT配置教程

3.3GPT配置、生成 3.3.1 GPT配置所需要的元素 GPT实际上就是硬件定时器,需要配置的元素有: 1)定时器时钟:定时器要工作需要使能它的时钟源 2)定时器分步:时钟源进到定时器后可以通过分频后再给到定时器 定时器模块选择:MCU有多个定时器模块,需要决定使用哪个定时器模块作…

基于Yolo5模型的动态口罩佩戴识别安卓Android程序设计

禁止完全抄袭&#xff0c;引用注明出处。 下载地址 前排提醒&#xff1a;文件还没过CSDN审核&#xff0c;GitHub也没上传完毕&#xff0c;目前只有模型的.pt文件可以下载。我会尽快更新。 所使用.ptl文件 基于Yolo5的动态口罩佩戴识别模型的pt文件资源-CSDN文库 项目完整文…

使用 Docker 部署 Next Terminal 轻量级堡垒机

1&#xff09;Next Terminal 介绍 官网&#xff1a;https://next-terminal.typesafe.cn/ GitHub&#xff1a;https://github.com/dushixiang/next-terminal 想必经常玩服务器的都了解过 堡垒机&#xff0c;类似于跳板机&#xff0c;但与跳板机的侧重点不同。堡垒机的主要功能是…

python编程从入门到实践答案二

python编程从入门到实践 第五章 if语句1.条件测试&#xff1a;2.更多的条件测试&#xff1a;3.外星人颜色#1&#xff1a;4. 外星人颜色#2&#xff1a;5. 外星人颜色#3&#xff1a;6. 人生的不同阶段&#xff1a;7. 喜欢的水果&#xff1a;8. 以特殊方式跟管理员打招呼&#xff…

前端加密面面观:常见场景与方法解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

单链表(下)

我们在单链表&#xff08;上&#xff09;中了解了一些需要实现的函数&#xff0c;这一篇就让我们一起来实现。 1.创建新节点 2.打印 3.尾插 4.头插 5.尾删 6.头删 7.查找 8.计算节点个数 9.在指定位置之前插入数据 10.在指定位置之前插入数据 11.删除指定位置的节点 12.删除指…

RIPEMD算法:多功能哈希算法的瑰宝

title: RIPEMD算法&#xff1a;多功能哈希算法的瑰宝 date: 2024/3/10 17:31:17 updated: 2024/3/10 17:31:17 tags: RIPEMD起源算法优势安全风险对比SHA优于MD5应用领域工作原理 一、RIPEMD算法的起源与历程 RIPEMD&#xff08;RACE Integrity Primitives Evaluation Messag…

阿里云服务器多少钱一年?价格表新鲜出炉(2024)

2024阿里云服务器优惠活动政策整理&#xff0c;阿里云99计划ECS云服务器2核2G3M带宽99元一年、2核4G5M优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;云服务器8核…

维修家用美容射频美容仪

今天收到客户寄过来的一款家用射频美容仪。根据客户的反馈&#xff0c;插电开机没反应&#xff0c;经过排查&#xff0c;原来是12v-2A电源坏了。给客户更换一个新电源就可以了。

Mysql 死锁案例2-间隙锁与意向插入锁冲突

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10) 事务1事务2T1START …