使用Kubernetes部署Spring Boot项目
目录
前提条件
新建Spring Boot项目并编写一个接口
新建Maven工程
导入 Spring Boot 相关的依赖
启动项目
编写Controller
测试接口
构建镜像
打jar包
新建Dockerfile文件
Linux目录准备
上传Dockerfile和target目录到Linux
制作镜像
查看镜像
测试镜像
上传镜像
准备yaml文件
创建deployment
应用springbootdemo.yaml创建deployment
查看deployment
查看deployment详情
查看pod
访问测试
扩容deployment pod
公布应用程序
对外暴露应用
查看服务
访问测试
前提条件
- 拥有Kubernetes集群环境,可参考:Kubernetes集群搭建
- 掌握Docker镜像知识,可参考:Docker镜像的使用
- 理解Kubernetes基本部署知识,可参考:使用Kubernetes部署第一个应用
- 有一定的Java、Spring Boot编程基础
新建Spring Boot项目并编写一个接口
新建Spring Boot项目及编写相关功能,这里编写一个Hello World接口。
环境说明:jdk8+, maven3+, IDEA2022
新建Maven工程
打开IDEA,File-->New,新建Maven项目,项目名称例如springbootdemo
导入 Spring Boot 相关的依赖
在该 Maven 项目的 pom.xml 中添加以下配置,在 </project>一行之前添加 Spring Boot 相关的依赖及打包插件。
<!-- 打包格式 --><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 打包插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable><layout>JAR</layout></configuration><executions><execution><goals><goal>repackage</goal></goals><configuration><attach>false</attach></configuration></execution></executions></plugin></plugins></build>
刷新依赖
在src/main/java目录下,新建包org.example
在org.example
包下新建启动类HelloWorldApplication
package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HelloWorldApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldApplication.class, args);}
}
启动项目
点击HelloWorldApplication.java第7行或第8行的绿色三角形启动项目
或者命令方式运行如下:
MacOS/Linux:
./mvnw spring-boot:run
Windows:
mvnw spring-boot:run
编写Controller
为了看到效果,在org.example
下新建controller
包,然后新建一个控制类HelloController
package org.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello(){return "Hello World";}
}
测试接口
重新运行项目
浏览器访问
http://localhost:8080/hello
效果如下:
看到Hello World,说明接口正常。
停止运行项目。
构建镜像
打jar包
在项目的target目录下看到jar包如下
本地命令行运行jar包
cmd进入jar包所在目录,执行如下命令
D:\code\springboot\springboot2\springbootdemo\target>java -jar springbootdemo-1.0-SNAPSHOT.jar
浏览器访问
http://localhost:8080/hello
返回数据正常,说明jar包可用。
在cmd命令行按Ctrl+c停止项目,或者直接关闭cmd命令窗口。
新建Dockerfile文件
在工程目录下,新建Dockerfile文件,文件内容如下
FROM openjdk:8-jdk-alpine
ADD ./target/springbootdemo-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar", "&"]
Docker在Linux下,需要把Dockerfile和target的jar包上传到Linux,再构建镜像。
Linux目录准备
在Linux下创建工作目录
[root@k8s-master01 ~]# mkdir -p test/springbootapp [root@k8s-master01 ~]# cd test/springbootapp [root@k8s-master01 test]#
上传Dockerfile和target目录到Linux
上传Dockerfile和target目录到Linux的/test/springbootapp目录
[root@k8s-master01 springbootapp]# ls Dockerfile target [root@k8s-master01 springbootapp]# ls target/ classes generated-test-sources maven-status springbootdemo-1.0-SNAPSHOT.jar.original generated-sources maven-archiver springbootdemo-1.0-SNAPSHOT.jar test-classes [root@k8s-master01 springbootapp]#
制作镜像
docker build -t springbootdemo:v1 .
操作过程
[root@k8s-master01 springbootapp]# docker build -t springbootdemo:v1 . [+] Building 579.2s (7/7) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 163B 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jdk-alpine 169.8s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load build context 0.1s=> => transferring context: 17.07MB 0.1s=> [1/2] FROM docker.io/library/openjdk:8-jdk-alpine@sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f228334 407.7s=> => resolve docker.io/library/openjdk:8-jdk-alpine@sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f22833435 0.0s=> => sha256:f910a506b6cb1dbec766725d70356f695ae2bf2bea6224dbe8c7c6ad4f3664a2 238B / 238B 38.2s=> => sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397 70.73MB / 70.73MB 402.1s=> => sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3 1.64kB / 1.64kB 0.0s=> => sha256:44b3cea369c947527e266275cee85c71a81f20fc5076f6ebb5a13f19015dce71 947B / 947B 0.0s=> => sha256:a3562aa0b991a80cfe8172847c8be6dbf6e46340b759c2b782f8b8be45342717 3.40kB / 3.40kB 0.0s=> => sha256:e7c96db7181be991f19a9fb6975cdbbd73c65f4a2681348e63a141a2192a5f10 2.76MB / 2.76MB 42.6s=> => extracting sha256:e7c96db7181be991f19a9fb6975cdbbd73c65f4a2681348e63a141a2192a5f10 0.4s=> => extracting sha256:f910a506b6cb1dbec766725d70356f695ae2bf2bea6224dbe8c7c6ad4f3664a2 0.0s=> => extracting sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397 4.6s=> [2/2] ADD ./target/springbootdemo-1.0-SNAPSHOT.jar app.jar 1.4s=> exporting to image 0.2s=> => exporting layers 0.2s=> => writing image sha256:00bb52a626f8e486a884f956ff944bcbecedb39329476a41fa7f5dbb1587dd5f 0.0s=> => naming to docker.io/library/springbootdemo:v1 0.0s [root@k8s-master01 springbootapp]#
查看镜像
[root@k8s-master01 springbootapp]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE springbootdemo v1 00bb52a626f8 About a minute ago 122MB registry.aliyuncs.com/google_containers/kube-apiserver v1.31.1 6bab7719df10 2 months ago 94.2MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.31.1 175ffd71cce3 2 months ago 88.4MB registry.aliyuncs.com/google_containers/kube-scheduler v1.31.1 9aa1fad94157 2 months ago 67.4MB registry.aliyuncs.com/google_containers/kube-proxy v1.31.1 60c005f310ff 2 months ago 91.5MB calico/typha v3.28.1 a19ab150aded 3 months ago 71.3MB calico/kube-controllers v3.28.1 9d19dff735fa 3 months ago 79.3MB calico/cni v3.28.1 f6d76a1259a8 3 months ago 209MB calico/node v3.28.1 8bbeb9e1ee32 3 months ago 365MB registry.aliyuncs.com/google_containers/coredns v1.11.3 c69fa2e9cbf5 3 months ago 61.8MB registry.aliyuncs.com/google_containers/etcd 3.5.15-0 2e96e5913fc0 3 months ago 148MB registry.aliyuncs.com/google_containers/pause 3.10 873ed7510279 5 months ago 736kB hello-world latest d2c94e258dcb 18 months ago 13.3kB registry.aliyuncs.com/google_containers/pause 3.8 4873874c08ef 2 years ago 711kB
能看到springbootdemo:v1
镜像。
测试镜像
使用Docker命令测试运行镜像
docker run -d -p 8080:8080 --name springbootdemo springbootdemo:v1
命令行访问
[root@k8s-master01 springbootapp]# curl localhost:8080/hello Hello World[root@k8s-master01 springbootapp]#
浏览器访问虚拟机ip:8080/hello
http://192.168.204.101:8080/hello
能访问,说明镜像正常。
删除容器
[root@k8s-master01 springbootapp]# docker rm -f springbootdemo
上传镜像
上传镜像到镜像仓库,这里使用阿里云镜像仓库为例。
登录阿里云,进入控制台,找到容器镜像服务,创建命名空间,创建创库名称,根据操作指南进行操作,详细步骤可参考:Docker镜像的使用
上传镜像命令
$ docker login --username=<your-account> registry.cn-shenzhen.aliyuncs.com
$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:[镜像版本号]
$ docker push registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:[镜像版本号]
注意:<your-account> 需要换成自己的账号名称
操作
# 登录阿里云 [root@k8s-master01 springbootapp]# docker login --username=<your-account> registry.cn-shenzhen.aliyuncs.com Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credential-stores Login Succeeded # 查看docker镜像id [root@k8s-master01 springbootapp]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE springbootdemo v1 00bb52a626f8 15 minutes ago 122MB registry.aliyuncs.com/google_containers/kube-apiserver v1.31.1 6bab7719df10 2 months ago 94.2MB registry.aliyuncs.com/google_containers/kube-scheduler v1.31.1 9aa1fad94157 2 months ago 67.4MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.31.1 175ffd71cce3 2 months ago 88.4MB registry.aliyuncs.com/google_containers/kube-proxy v1.31.1 60c005f310ff 2 months ago 91.5MB calico/typha v3.28.1 a19ab150aded 3 months ago 71.3MB calico/kube-controllers v3.28.1 9d19dff735fa 3 months ago 79.3MB calico/cni v3.28.1 f6d76a1259a8 3 months ago 209MB calico/node v3.28.1 8bbeb9e1ee32 3 months ago 365MB registry.aliyuncs.com/google_containers/coredns v1.11.3 c69fa2e9cbf5 3 months ago 61.8MB registry.aliyuncs.com/google_containers/etcd 3.5.15-0 2e96e5913fc0 3 months ago 148MB registry.aliyuncs.com/google_containers/pause 3.10 873ed7510279 5 months ago 736kB hello-world latest d2c94e258dcb 18 months ago 13.3kB registry.aliyuncs.com/google_containers/pause 3.8 4873874c08ef 2 years ago 711kB # 对镜像打标签 [root@k8s-master01 springbootapp]# docker tag 00bb52a626f8 registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:v1 [root@k8s-master01 springbootapp]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo v1 00bb52a626f8 16 minutes ago 122MB springbootdemo v1 00bb52a626f8 16 minutes ago 122MB registry.aliyuncs.com/google_containers/kube-apiserver v1.31.1 6bab7719df10 2 months ago 94.2MB registry.aliyuncs.com/google_containers/kube-scheduler v1.31.1 9aa1fad94157 2 months ago 67.4MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.31.1 175ffd71cce3 2 months ago 88.4MB registry.aliyuncs.com/google_containers/kube-proxy v1.31.1 60c005f310ff 2 months ago 91.5MB calico/typha v3.28.1 a19ab150aded 3 months ago 71.3MB calico/kube-controllers v3.28.1 9d19dff735fa 3 months ago 79.3MB calico/cni v3.28.1 f6d76a1259a8 3 months ago 209MB calico/node v3.28.1 8bbeb9e1ee32 3 months ago 365MB registry.aliyuncs.com/google_containers/coredns v1.11.3 c69fa2e9cbf5 3 months ago 61.8MB registry.aliyuncs.com/google_containers/etcd 3.5.15-0 2e96e5913fc0 3 months ago 148MB registry.aliyuncs.com/google_containers/pause 3.10 873ed7510279 5 months ago 736kB hello-world latest d2c94e258dcb 18 months ago 13.3kB registry.aliyuncs.com/google_containers/pause 3.8 4873874c08ef 2 years ago 711kB # 上传镜像 [root@k8s-master01 springbootapp]# docker push registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:v1 The push refers to repository [registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo] 7217cf1a65b2: Pushed ceaf9e1ebef5: Pushed 9b9b7f3d56a0: Pushed f1b5933fe4b5: Pushed v1: digest: sha256:360f8ce8a2358fca237f6fd884cf58a3f9184c3fa08f9b475a35fe0bc2bb93bc size: 1159 [root@k8s-master01 springbootapp]#
查看上传成功的镜像
镜像大小是压缩过后的大小。
准备yaml文件
# 生成springbootdemo.yaml
[root@k8s-master01 ~]# kubectl create deployment springboothello --image=registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:v1 --dry-run=client -o yaml > springbootdemo.yaml# 查看yaml文件
[root@k8s-master01 ~]# ls
... springbootdemo.yaml ...# 查看springbootdemo.yaml内容
[root@k8s-master01 ~]# cat springbootdemo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: springboothelloname: springboothello
spec:replicas: 1selector:matchLabels:app: springboothellostrategy: {}template:metadata:creationTimestamp: nulllabels:app: springboothellospec:containers:- image: registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:v1name: springbootdemoresources: {}
status: {}
创建deployment
应用springbootdemo.yaml创建deployment
[root@k8s-master01 ~]# kubectl apply -f springbootdemo.yaml deployment.apps/springboothello created
查看deployment
[root@k8s-master01 ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE springboothello 0/1 1 0 12s
查看deployment详情
[root@k8s-master01 ~]# kubectl describe deployment springboothello Name: springboothello Namespace: default CreationTimestamp: Thu, 14 Nov 2024 12:28:11 +0800 Labels: app=springboothello Annotations: deployment.kubernetes.io/revision: 1 Selector: app=springboothello Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template:Labels: app=springboothelloContainers:springbootdemo:Image: registry.cn-shenzhen.aliyuncs.com/mytest_ns/springbootdemo:v1Port: <none>Host Port: <none>Environment: <none>Mounts: <none>Volumes: <none>Node-Selectors: <none>Tolerations: <none> Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: springboothello-747b759b88 (1/1 replicas created) Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 103s deployment-controller Scaled up replica set springboothello-747b759b88 to 1
查看pod
[root@k8s-master01 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE springboothello-747b759b88-v8t54 1/1 Running 0 2m59s [root@k8s-master01 ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboothello-747b759b88-v8t54 1/1 Running 0 3m52s 10.244.85.192 k8s-node01 <none> <none> [root@k8s-master01 ~]#
访问测试
集群内,命令访问
[root@k8s-master01 ~]# curl 10.244.85.192:8080/hello Hello World[root@k8s-master01 ~]# [root@k8s-node01 ~]# curl 10.244.85.192:8080/hello Hello World[root@k8s-node01 ~]# [root@k8s-node02 ~]# curl 10.244.85.192:8080/hello Hello World[root@k8s-node02 ~]#
注意:此时只能在集群内部使用。如果用集群外的浏览器访问,访问不了
扩容deployment pod
# pod扩容为3 [root@k8s-makubectl scale deployment springboothello --replicas=3 deployment.apps/springboothello scaled # 查看pods,还有容器正在创建 [root@k8s-master01 ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboothello-747b759b88-cs9dv 1/1 Running 0 6s 10.244.85.196 k8s-node01 <none> <none> springboothello-747b759b88-jzlpm 0/1 ContainerCreating 0 6s <none> k8s-node02 <none> <none> springboothello-747b759b88-v8t54 1/1 Running 0 112m 10.244.85.192 k8s-node01 <none> <none> # 查看pods,成功如下 [root@k8s-master01 ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboothello-747b759b88-cs9dv 1/1 Running 0 3m8s 10.244.85.196 k8s-node01 <none> <none> springboothello-747b759b88-jzlpm 1/1 Running 0 3m8s 10.244.58.194 k8s-node02 <none> <none> springboothello-747b759b88-v8t54 1/1 Running 0 115m 10.244.85.192 k8s-node01 <none> <none> [root@k8s-master01 ~]#
公布应用程序
对外暴露应用
# 对外暴露应用 [root@k8s-master01 ~]# kubectl expose deployment springboothello --port=8080 --target-port=8080 --type=NodePort
命令参数说明
-
expose
:这是kubectl
的一个子命令,用于创建一个新的服务来暴露一个资源(如 Deployment、Pod 等)。 -
deployment springboothello
:指定要暴露的资源是名为springboothello
的 Deployment。这意味着该服务会将流量路由到这个 Deployment 所管理的 Pod 集合上。 -
--port=8080
:定义了服务在集群内部监听的端口号为 8080。当其他服务或 Pod 在集群内部要访问这个服务时,会使用这个端口。 -
--target-port=8080
:指定了流量最终要被转发到后端 Pod 上的端口号也是 8080。也就是说,从服务的 8080 端口接收到的流量会被转发到对应的 Deployment 所管理的 Pod 的 8080 端口上。 -
--type=NodePort
:设置服务的类型为 NodePort。这种类型的服务会在集群中的每个节点(Node)上开放一个指定范围(通常是 30000 - 32767)内的随机端口,外部客户端可以通过访问集群中任意节点的该随机端口来访问到服务背后的应用(这里就是springboothello
Deployment 所管理的 Pod 运行的应用)。
查看服务
# 查看service [root@k8s-master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 60d springboothello NodePort 10.1.199.196 <none> 8080:30582/TCP 8s [root@k8s-master01 ~]#
从service中,可以看到springboothello的Service CLUSTER-IP为10.1.199.196
,PORT 8080
映射为30582
端口
访问测试
命令访问Service CLUSTER-IP:8080/hello
[root@k8s-master01 ~]# curl 10.1.199.196:8080/hello Hello World[root@k8s-master01 ~]#
命令访问K8S机器IP:30582
[root@k8s-master01 ~]# curl 192.168.204.101:30582/hello Hello World[root@k8s-master01 ~]# [root@k8s-master01 ~]# curl 192.168.204.102:30582/hello Hello World[root@k8s-master01 ~]# [root@k8s-master01 ~]# curl 192.168.204.103:30582/hello Hello World[root@k8s-master01 ~]#
浏览器访问
192.168.204.101:30582/hello 192.168.204.102:30582/hello 192.168.204.103:30582/hello
看到能正常返回数据,说明公布应用程序成功。
至此,已成功使用Kubernetes部署Spring Boot项目。
完成! enjoy it!
相关文章:

使用Kubernetes部署Spring Boot项目
目录 前提条件 新建Spring Boot项目并编写一个接口 新建Maven工程 导入 Spring Boot 相关的依赖 启动项目 编写Controller 测试接口 构建镜像 打jar包 新建Dockerfile文件 Linux目录准备 上传Dockerfile和target目录到Linux 制作镜像 查看镜像 测试镜像 上传镜…...

基于VTX356语音识别合成芯片的智能语音交互闹钟方案
一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力,结合蓝牙功能、APP或小程序,打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外,还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…...

git将一个项目的文件放到另一个项目的文件夹下
现有productA与productB项目,现将productA、productB放到productC下的mall-web文件下,目前只能实现保留productA的提交记录,暂不能实现保留两个的提交记录 一.克隆最新的productC的库,这里指mall-web 二.将productA复制到mall-we…...

Cannon.js 从入门到精通
开发领域:前端开发 | AI 应用 | Web3D | 元宇宙 技术栈:JavaScript、React、ThreeJs、WebGL、Go 经验经验:6 年 前端开发经验,专注于图形渲染和 AI 技术 开源项目:智简未来、数字孪生引擎 github 大家好!我…...

深入理解 TCP 标志位(TCP Flags)
深入理解 TCP 标志位(TCP Flags) 1. 简介 在网络安全和网络分析领域,TCP标志位(TCP Flags)是理解网络行为和流量模式的关键概念。特别是在使用工具如Nmap进行端口扫描时,理解这些标志位的意义和用法至关重…...

K8S,StatefulSet
有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题? 分布式应用,它的多个实例之间,往往有依赖关系,比如:主从关系、主备关系。 还有就是数据存储类应用,它的多个实例,往往都会在本地…...

JavaScript动态网络爬取:深入解析与实践指南
引言 随着互联网技术的发展,越来越多的网站采用动态加载技术来提供丰富的用户体验。这些动态内容的加载依赖于JavaScript,给传统的网络爬虫带来了挑战。JavaScript动态网络爬取技术应运而生,它允许开发者模拟用户行为,获取动态加…...

MySql:Centos7安装MySql
目录 安装之前,清除MySql残留文件 下载MySql的官方yum源 安装MySql 服务 MySql配置 常见问题 本次安装基于Centos7,平台为云服务器,由XShell软件演示。 注意,请将用户切换为Root用户。 安装之前,清除MySql残留文…...

Vector软件CANdb++的信号起始位Bug
问题现象 前几天导入DBC文件发现不对劲,怎么生成代码的起始地址都怪怪的,检查下工程里面的配置,还真的是这样,一路查到输入文件——DBC文件,发现是DBC文件就有错误:一些CAN报文之后8字节长度,也…...

elasticsearch-7.14.0集群部署+kibana
1、修改系统参数 用户对软件的内存和硬盘使用权限 vim /etc/security/limits.conf * soft nproc 655350 * soft nofile 655350 * hard nproc 655350 * hard nofile 655350修改最大线程数 vim /etc/sysctl.conf vm.max_map_count262144配置用户最大的线程数 vim /etc/security/…...

如何给GitHub的开源项目贡献PR
🎯导读:本文详细介绍了如何向开源项目“代码随想录”贡献自己的题解。首先,需要Fork原项目的仓库至个人GitHub账户,然后解决克隆仓库时可能遇到的SSH密钥问题。接着,按照标准流程对本地仓库进行代码或文档的修改&#…...

神经网络-CNN
卷积神经网络 CNN 感受野 感受野(Receptive Field)在卷积神经网络(CNN)中是一个非常重要的概念,它描述了网络中某一层的输出(通常是特征图上的一个像素点)所对应的输入图像上的空间范围。 1. 定…...

4.Vue-------this.$set()的使用和详细过程-------vue知识积累
在Vue.js中,this.$set()是Vue实例this.someProperty someValue来为Vue实例的属性赋值时,Vue会自动将该属性设置为响应式的,这样当属性的值变化时,相关的视图会自动更新 一. 对象的修改 对象:修改和新增 先定义数据对…...

服务器上的常见Linux命令教程
在管理服务器(如香港服务器)时,掌握常见的 Linux 命令 是非常重要的,它们可以帮助你高效地完成服务器管理任务,如文件操作、进程管理、用户管理、网络配置等。 以下是一个系统化的 Linux 常见命令教程,分为…...

汽车总线协议分析-FlexRay总线
随着汽车智能化发展,汽车增加安全性和舒适体验的功能增多,用于实现这些功能的传感器、ECU的数量也在持续上升,严重阻碍了线控技术的发展。常用的CAN、LIN等总线由于缺少同步性、确定性和容错性不能满足汽车线控系统(X-by-Wire)的要求。因此&a…...

Java 集合:强大的数据管理工具
在 Java 编程中,集合是一种非常重要的工具,它提供了一种方便的方式来存储和操作一组对象。本文将深入探讨 Java 集合框架,包括其主要类型、特点、用法以及一些最佳实践。 一、引言 在软件开发过程中,我们经常需要处理一组数据。…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg复用
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...

python之Django连接数据库
文章目录 连接Mysql数据库安装Mysql驱动配置数据库信息明确连接驱动定义模型在模型下的models.py中定义表对象在settings.py 中找到INSTALLED_APPS添加创建的模型 测试testdb.py中写增删改查操作urls.py添加请求路径启动项目进行测试 连接Mysql数据库 安装Mysql驱动 pip inst…...

基于Springboot+Vue的在线答题闯关系统
基于SpringbootVue的在线答题闯关系统 前言:随着在线教育的快速发展,传统的教育模式逐渐向互联网教育模式转型。在线答题系统作为其中的一个重要组成部分,能够帮助用户通过互动式的学习方式提升知识掌握度。本文基于Spring Boot和Vue.js框架&…...

声音克隆GPT-SoVITS
作者:吴业亮 博客:wuyeliang.blog.csdn.net 一、原理介绍 GPT-SoVITS,作为一款结合了GPT(生成预训练模型)和SoVITS(基于变分信息瓶颈技术的歌声转换)的创新工具,正在声音克隆领域掀…...

【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…...

前端开发入门指南Day 17:TypeScript高级类型(泛型,类型守卫,Partial<T>和 Required<T>等)
泛型:代码的"变色龙" 🦎 为什么需要泛型? 想象一个快递员,每天要处理不同类型的包裹。如果为每种类型的包裹都写一套处理程序,那会很麻烦。泛型就像是一个"通用的包裹处理系统",它能…...

flex布局容易忽略的角色作用
目录 清除浮动 作用于行内元素 flex-basis宽度 案例一: 案例二: 案例三: flex-grow设置权重 案例一: 案例二: 简写flex-grow:1 0 auto; flex作为一维布局,行和列的使用,忽略的小角色,大…...

如何开发高效的企业内训APP?教育培训系统源码搭建实战详解
本篇文章,小编将从教育培训系统的源码搭建、功能设计以及技术实现等方面,详细探讨如何开发一款高效的企业内训APP。 一、企业内训APP的需求分析 在开发企业内训APP之前,首先需要明确其基本需求。一个高效的企业内训APP应该具备以下几个核心…...

【软考网工笔记】网络基础理论——传输层
IPSec协议 Internet协议安全性是一种开放标准的框架结构,通过使用加密的安全服务以确保在Internet协议(IP)网络上进行保密而安全的通讯。 工作在OSI模型的第三层网络层上,使其在单独使用时适于保护基于TCP或UDP的协议࿰…...

如何预防服务器后台爆破攻击
服务器后台爆破(Brute Force Attack)是一种通过反复尝试用户名和密码组合,以非法获取系统访问权限的攻击方式。这种攻击不仅会消耗服务器资源,还可能导致合法用户被锁定或敏感数据泄露。为了有效预防服务器后台爆破攻击࿰…...

CMake笔记之在CMakeLists.txt文件中开启Debug模式
CMake笔记之在CMakeLists.txt文件中开启Debug模式 code review! 文章目录 CMake笔记之在CMakeLists.txt文件中开启Debug模式1.设置 CMake 的构建类型2.添加编译器的调试选项3.使用 CMAKE_CXX_STANDARD (可选)4.编译和构建5.针对多配置生成器6.最终示例 CMakeLists.txt 1.设置 …...

C++编程:模拟实现CyberRT的DataVisitor和DataDispatcher
文章目录 0. 引言1. 设计概要1.1 主要组件1.2 类关系图1.3 工作流程 2. 代码实现2.1. 定义数据结构2.2. 实现 DataVisitor2.3. 实现 DataDispatcher2.4. 实现 Receiver2.5. 实现具体的 DataVisitor2.6. 示例主程序2.7. 编译和运行 0. 引言 使用 C 实现一个类似CyberRT 架构的 …...

【Flutter】WillPopScope组件-监听物理返回键事件自定义返回事件
WillPopScope(onWillPop: () async {if ( flutterWebViewPlugin ! null && await flutterWebViewPlugin.canGoBack() true) {flutterWebViewPlugin!.goBack();return false; // 阻止默认的返回行为} else {return true; // 允许默认的返回行为}},child: Scaffold(),);…...

【sqlserver】mssql 批量加载数据文件 bulk copy使用
参考文章: Using bulk copy with the JDBC driver SqlServer数据批量写入 SqlServer批量插入数据方法–SqlBulkCopy sqlserver buld copy需要提供,数据文件的对应表的元数据信息主要的字段的位置、字段的名称、字段的数据类型。 执行bulk load时候不一…...