云计算实训41——部署project_exam_system项目(续)

news2024/11/15 15:42:46
# 创建脚本,可以在java环境中运行任何的jar包或者war包

#!/bin/bash

/usr/local/jdk/bin/java -jar /java/src/*.?ar

一、思路分析

(1)nginx

1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ 2、启动容器

3、该项目是一个前后端分离的项目,并非所有的请求都是来自同一个位置,设置请求的时候还是需 要在hosts文件中挟持域名

4、域名是固定的,但是,域名可以绑定不同的ip 5、所以我们设置前端请求发送给一个bu.yuanyu.zhangmin的域名,然后在本机中将域名劫持给我 们的docker服务器,当我们发送请求给该域名时,docker服务器将给我们作出回应

(2)mysql

1、各个版本都有官方的镜像,直接下载docker pull mysql:5.7.44 2、启动容器的时候,挂载data目录

3、制作data的时候,顺⼿删除auto.cnf

(3)tomcat

1、被war包集成,所以我们直接启动war 2、springboot可以直接集成tomcat,build一个jar包或者是war包

3、我们没有安装tomcat 4、application.properties(将tomcat连接数据库)

1、可以配置端口

2、配置数据库的访问

5、使用/usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war启动,但是在启动这个任务时 一定要跳转到application.properties文件所在目录,因为在启动的同时,还需要加载applicaiton.properties

二、制作docker-compose.yml文件,实现一键部署

1、基础准备(保证基础镜像无问题)

1)下载基础镜像

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx       latest   5ef79149e0ec   2 weeks ago   188MB
mysql        5.7.44   5107333e08a8   8 months ago   501MB
centos       latest   5d0da3dc9764   2 years ago   231MB

2)创建nginx:v0镜像

[root@docker project_exam_system]# tree web/

web/
├── dist
│?? ├── assets
│?? │?? ├── AdminView-yX0Ltz_1.js
│?? │?? ├── CategoryView-Ca4t3JNT.js
│?? │?? ├── CityView-0ESlUfo8.css
│?? │?? ├── CityView-BJTl06GN.js
......
│   ├── TeacherView-Cogr4CCq.js
│   │   ├── TopicView-DFXgxSyC.js
│   │   └── TopicView-Is6fJS__.css
│   ├── favicon.ico
│   └── index.html
└── Dockerfile
[root@docker web]# docker build -t nginx:v0 .

[+] Building 0.2s (7/7) FINISHED                                             
  docker:default
[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx       v0       13ccc573fe05   9 seconds ago   189MB

3)创建java:v0镜像

[root@docker project_exam_system]# tree java

java
├── application.properties
├── Dockerfile
├── java.sh
├── jdk
│   ├── bin
│   │   ├── jar
│   │   ├── jarsigner
│   │   ├── java
│   │   ├── javac
......
│   │       ├── rmiregistry.1
│   │       └── serialver.1
│   ├── README
│   └── release
├── jdk-17_linux-x64_bin.tar.gz
└── Project_ExamSystem-V1.0.0.war
[root@docker java]# docker build -t java:v0 .

[+] Building 7.2s (9/9) FINISHED                                             
  docker:default
[root@docker java]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
java         v0       7fae85c42cbe   36 seconds ago   591MB

4)创建mysql:v0镜像

[root@docker project_exam_system]# tree mysql/

mysql/
├── Dockerfile
└── project_exam_system.sql

0 directories, 2 files
[root@docker mysql]# docker build -t mysql:v0 .

[+] Building 0.3s (7/7) FINISHED                                             
  docker:default
[root@docker mysql]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql       v0       258d8ed442ac   16 seconds ago   512MB

5)启动nginx容器

[root@docker ~]# docker run -itd -p80:80 nginx:v0

6)启动java容器

[root@docker ~]# docker run -itd --name java -p8080:8080 java:v0

7)启动mysql容器

[root@docker ~]# docker run -itd --name mysql -p3306:3306 mysql:v0

8)查看容器状态

[root@docker ~]# docker ps

CONTAINER ID   IMAGE           COMMAND                   CREATED             
STATUS             PORTS                                                 
NAMES
79cc8614e967   mysql:v0         "docker-entrypoint.s…"   9 seconds ago       
Up 6 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   
mysql
29d3ce68ceca   java:v0          "/usr/local/jdk/bin/…"   36 seconds ago     
Up 34 seconds      0.0.0.0:8080->8080/tcp, :::8080->8080/tcp             java
fed2633b259b   haproxy:latest   "docker-entrypoint.s…"   12 minutes ago     
Up 11 minutes      0.0.0.0:5000->5000/tcp, :::5000->5000/tcp             
wizardly_edison

# 之后这些容器可以全部直接删除

[root@docker ~]# docker rm -f 79(容器编号) 29(容器编号) fe(容器编号)

2、配置高可用的项目(使用haproxy调用web和java容器)

1)先创建三个前端项目(nginx容器)

容器在不映射端口时,在远程是无法访问nginx服务,而且现在也不希望外部直接访问nginx,希望 创建nginx服务的集群,这个集群被haproxy代理,创建3个nginx容器,创建一个haproxy服务器,而且

nginx容器还需要指定名称,web0、web1、web2。因为如果没有名称,那么容器就无法被haproxy link到。

# 端口不能映射80,并指定名称

[root@docker ~]# docker run -itd --name web0 nginx:v0 

45d83cda5bef619b937d25e581db31401841b955f9367dbffbc79a236e632612
[root@docker ~]# docker run -itd --name web1 nginx:v0 

b9c80deb9f08a4c2327c1784c8fdb3ab8044c48160ee29102f27e2b52495b9f4
[root@docker ~]# docker run -itd --name web2 nginx:v0 

5fbd082f529cdab21b3a2eb74ae6d9560c694fe2a5368e1ad63affe1ad1c93e8

# 查看容器状态

[root@docker ~]# docker ps 

CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS   
      PORTS     NAMES
5fbd082f529c   nginx:v0   "/docker-entrypoint.…"   4 seconds ago   Up 3 
seconds    80/tcp   web2
b9c80deb9f08   nginx:v0   "/docker-entrypoint.…"   8 seconds ago   Up 6 
seconds    80/tcp   web1
45d83cda5bef   nginx:v0   "/docker-entrypoint.…"   12 seconds ago   Up 11 
seconds   80/tcp   web0

2)haproxy容器外部测试

在宿主机上安装了haproxy,编辑配置文件,代理三个nginx容器中的web服务,是直接添加容器的

ip地址

# 安装haproxy

[root@docker ~]# yum -y install haproxy
# 查看三个nginx容器的IP地址

[root@docker ~]# docker inspect 45 | grep IPA

            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
[root@docker ~]# docker inspect b9 | grep IPA

            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",
[root@docker ~]# docker inspect 5f | grep IPA

            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.4",

# 修改配置文件

[root@docker ~]# vim /etc/haproxy/haproxy.cfg
# 注释静态资源

   # use_backend static         if url_static
# 修改轮询模块

backend app
   balance     roundrobin
   server app1 172.17.0.2:80 check
   server app2 172.17.0.3:80 check
   server app3 172.17.0.4:80 check

# 启动服务

[root@docker ~]# haproxy -f /etc/haproxy/haproxy.cfg 

[root@docker ~]# netstat -lntup | grep 5000

tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN   
   1985/haproxy 

# 测试访问过后可以直接删除进程来停止服务

[root@docker ~]# kill -9 1985(进程号)

[root@docker ~]# netstat -lntup | grep 5000

3)创建haproxy容器

创建一个haproxy容器,将配置文件导入到容器,在容器中启动haproxy,也是可以的

# 拉取haprxy镜像

[root@docker ~]# docker pull haproxy

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
haproxy     latest   4e5bebb0fd91   7 weeks ago   103MB

# 该haproxy.cfg文件是在官方网站里下载下来的

[root@docker ~]# vim haproxy.cfg 
# 只修改web的轮询模块即可,默认是5000端口,也可修改

listen proxy-web
       bind 0.0.0.0:5000
......
       server web0 172.17.0.2:80 check weight 1 maxconn 2000
 server web1 172.17.0.3:80 check weight 1 maxconn 2000

       server web2 172.17.0.4:80 check weight 1 maxconn 2000

[root@docker ~]# docker run -itd -p5000:5000 haproxy:latest /bin/bash

fed2633b259b96d3c0ed5e9ca51c031c36b1e21361cb3cf9d57b9d49a9ea1710
[root@docker ~]# docker cp haproxy.cfg fed:/usr/local/etc/haproxy

Successfully copied 5.12kB to fed:/usr/local/etc/haproxy
[root@docker ~]# docker attach fed

haproxy@fed2633b259b:~$ ls /usr/local/etc/haproxy/haproxy.cfg 
/usr/local/etc/haproxy/haproxy.cfg

# 启动服务

haproxy@fed2633b259b:~$ haproxy -f /usr/local/etc/haproxy/haproxy.cfg 

4)使用haproxy容器调用web容器

# -itd 交互 终端 后台

# link 锚定web容器

# v 将配置文件挂载到容器中

[root@docker ~]# docker run -itd --link web0 --link web1 --link web2 -
p5000:5000 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg 
haproxy:latest

65466d3aef2566512b63690c02e4497ddb7594b8268a26136ec040e2cb858b3b
[root@docker ~]# docker ps

CONTAINER ID   IMAGE           COMMAND                   CREATED         
STATUS         PORTS                                                 NAMES
65466d3aef25   haproxy:latest   "docker-entrypoint.s…"   6 seconds ago   Up 4 
seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp             
romantic_curie
79cc8614e967   mysql:v0         "docker-entrypoint.s…"   2 hours ago     Up 2 
hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
29d3ce68ceca   java:v0          "/usr/local/jdk/bin/…"   3 hours ago     Up 3 
hours     0.0.0.0:8080->8080/tcp, :::8080->8080/tcp             java
5fbd082f529c   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 
hours     80/tcp                                                 web2
b9c80deb9f08   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 
hours     80/tcp                                                 web1
45d83cda5bef   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 
hours     80/tcp                                                 web0

# 删除该haproxy容器(使用的是ip地址,要改为使用域名才可以进行link)

[root@docker ~]# docker rm -f 65

5)调用haproxy的监控界面(并改ip轮询为域名轮询)

# 只查看即可,创建haproxy服务器容器时将相应端口映射出去就行,记得初始的账户和密码

[root@docker ~]# vim haproxy.cfg 
######## 监控界面配置 #################

listen admin_status
        # 监控界面访问信息

       bind 0.0.0.0:8888
       mode http
        # URI相对地址

       stats uri /dbs
        # 统计报告格式

       stats realm Global\ statistics
        # 登录账户信息

       stats auth admin:123456
[root@docker ~]# vim haproxy.cfg

       server web0 web0:80 check weight 1 maxconn 2000

       server web1 web1:80 check weight 1 maxconn 2000

       server web2 web2:80 check weight 1 maxconn 2000

[root@docker ~]# docker run -itd --link web0 --link web1 --link web2 -
p5000:5000 -p8888:8888 -v 
/root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
# 删除该haproxy容器

[root@docker ~]# docker rm -f 8af

6)使用haproxy容器调用java容器

[root@docker ~]# docker run -itd --name java0 java:v0

283c87bcaea166b017160aa84ce5424dd9baf3ec8fd168a1406f7dc11be3e694
[root@docker ~]# docker run -itd --name java1 java:v0

e851f31c87f39c2d028e42b36bd77bcf818a8eb97c9a6cc002656fd1501c0ea6
[root@docker ~]# docker run -itd --name java2 java:v0

fb94c87c4fa87d08b0d621157aa33ed74ca459beb32a3c950a7703227ab2f031
[root@docker ~]# vim haproxy.cfg 
# 复制一份proxy-web的模块,修改为java模块

listen proxy-java

# 修改端口为8080

       bind 0.0.0.0:8080
       mode http
        # 负载均衡算法

        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin

       balance roundrobin
        # 日志格式

       option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户

        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;

        #option mysql-check user haproxy

         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效

# 修改域名为java域名,端口为java端口

       server java0 java0:8080 check weight 1 maxconn 2000

       server java1 java1:8080 check weight 1 maxconn 2000

       server java2 java2:8080 check weight 1 maxconn 2000

        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000

        # 使用keepalive检测死链

        # option tcpka

[root@docker ~]# docker run -itd --link web0 --link web1 --link web2 --link 
java0 --link java1 --link java2 -p8080:8080 -p5000:5000 -p8888:8888 -v 
/root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest

e5ea894c0f30988604cfd6fe5a48b9a69f14c2c3f2e373fe775c0554f37f19db

# 下载http-tools,使用ab测试承载量

[root@docker ~]# yum -y install http-tools

[root@docker ~]# ab -n 100 -c 10 http://10.0.0.7:5000/

3、编辑docker-compose.yml文件,一键部署完整项目

新机子:

1)docker-compose环境准备

# 配置docker环境

source docker.sh
scp 10.0.0.7:/etc/docker/daemon.json /etc/docker/daemon.json

vim /etc/docker/daemon.json 
{       
        "registry-mirrors" : [
                "https://do.nark.eu.org",
                "https://dc.j8.work",
                "https://docker.m.daocloud.io",
                "https://dockerproxy.com",
                "https://docker.mirrors.ustc.edu.cn",
                "https://docker.nju.edu.cn"

       ]
}  
systemctl start docker

# 安装pip(python包管理器)

yum -y install python2-pip

# 升级pip

pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple

# 安装docker-compose

[root@compose ~]# pip install docker-compose --ignore-installed requests -i 
https://mirrors.aliyun.com/pypi/simple

2)使用compose构建自动化部署文件

# 创建项目目录

[root@compose ~]# mkdir -p pes/{java,mysql,web}

[root@compose ~]# tree pes/

pes/
├── java
├── mysql
└── web

3 directories, 0 files
[root@compose ~]# cd pes
# 在项目目录中创建docker-compoce.yml文件

[root@compose pes]# vim docker-compose.yml

version: "3"

services:
web:
               container_name: web0
               image: nginx:latest
               ports:
                - "80:80"

               volumes:
                - ./web/src/dist/:/usr/share/nginx/html/
               expose:
                - 80

                restart: "always"

#       mysql:
#               container_name: mysql0
#               image: mysql:5.7.44
#       java:
#               container_name: java0
#               image: java:v0

[root@compose pes]# mkdir -p web/src/

[root@compose pes]# scp -r 10.0.0.7:/root/project_exam_system/web/dist 
web/src/

[root@compose pes]# ls web/src/

dist

# 拉取nginx镜像

[root@compose pes]# docker pull nginx

Using default tag: latest

# 执行docker compose命令创建指定容器

[root@compose pes]# docker compose up -d

WARN[0000] /root/pes/docker-compose.yml: `version` is obsolete 
[+] Running 1/1
 ✔ Container web0 Started                                                   
             0.9s 
 # 查看容器是否正常创建启动

[root@compose pes]# docker ps

CONTAINER ID   IMAGE         COMMAND                   CREATED             
STATUS             PORTS                               NAMES
5a007ca2fdbe   nginx:latest   "/docker-entrypoint.…"   About a minute ago   
Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   web0

3)使用docker compose一次性创建多台完全一样的容器

# 查看docker-compose的帮助文档

[root@compose ~]# docker-compose --help

scale             Set number of containers for a service

# 查看docker-compose scale的帮助文档

[root@compose ~]# docker-compose scale --help

Usage: scale [options] [SERVICE=NUM...]

# 一次性创建多台相同容器时,不能为容器启相同的名称,映射相同的端口,所以需要在yml文件中将这
两行注释掉

[root@compose pes]# vim docker-compose.yml 

version: "3"

services:
       web:
                #container_name: web0

               image: nginx:latest
                #ports:

                #- "80:80"

               volumes:
                - ./web/src/dist/:/usr/share/nginx/html/
               expose:
                - 80

                restart: "always"

# 使用scale选项创建3台相同的web容器

[root@compose pes]# docker compose up --scale web=3 -d

WARN[0000] /root/pes/docker-compose.yml: `version` is obsolete 
[+] Running 3/3
 ✔ Container pes-web-3 Started                                             
              0.8s 
 ✔ Container pes-web-1 Started                                             
              0.5s 
 ✔ Container pes-web-2 Started                                             
              1.1s

# 查看容器列表

[root@compose ~]# docker ps

CONTAINER ID   IMAGE         COMMAND                   CREATED         
STATUS         PORTS     NAMES
dd63d63e1ced   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 
minutes   80/tcp   pes_web_2
12edb14dfae7   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 
minutes   80/tcp   pes_web_1
89fa62180f85   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 
minutes   80/tcp   pes_web_3

# docker-compose暂停集群

[root@compose ~]# cd pes/

[root@compose pes]# docker-compose stop

/usr/lib/python2.7/site-packages/paramiko/transport.py:33: 
CryptographyDeprecationWarning: Python 2 is no longer supported by the Python 
core team. Support for it is now deprecated in cryptography, and will be 
removed in the next release.
 from cryptography.hazmat.backends import default_backend
Stopping pes-web-1 ... done

Stopping pes-web-3 ... done

Stopping pes-web-2 ... done

[root@compose pes]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS   PORTS     NAMES

# docker-compose移除集群

[root@compose pes]# docker-compose down

/usr/lib/python2.7/site-packages/paramiko/transport.py:33: 
CryptographyDeprecationWarning: Python 2 is no longer supported by the Python 
core team. Support for it is now deprecated in cryptography, and will be 
removed in the next release.
 from cryptography.hazmat.backends import default_backend
Removing pes-web-1 ... done

Removing pes-web-3 ... done

Removing pes-web-2 ... done

Removing network pes_default
[root@compose pes]# docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS   PORTS     NAMES

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

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

相关文章

哈希:哈希函数 | 哈希概念 | 哈希冲突 | 闭散列 | 开散列

🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据…

在线式环氧乙烷检测仪:现代工业生产中的环氧乙烷安全监测

在现代工业生产的广阔领域中,环氧乙烷(C2H4O)作为一种不可或缺的化工原料,其应用范围广泛且深远,涵盖了涂料、树脂、塑料、印染、纺织品等多个关键行业。然而,环氧乙烷的化学性质极为活泼,不仅易…

小阿轩yx-云原生存储Rook部署Ceph

小阿轩yx-云原生存储Rook部署Ceph 前言 Rook 一款云原生存储编排服务工具由云原生计算基金会(CNCF)孵化,且于2020年10月正式进入毕业阶段。并不直接提供数据存储方案,而是集成了各种存储解决方案,并通过一种自管理、…

SprinBoot+Vue图书馆预约与占座微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

“Flash闪存”介绍 及 “SD NAND Flash”产品的测试含例程

文章目录 前言一、“FLASH闪存”是什么?1. 简介2. 特点3. 未来发展 二、SD NAND Flash1. 概述2. 特点3. 引脚分配4. 数据传输模式5. SD NAND寄存器6. 通电图7. 参考设计 三、STM32测试例程1. 初始化2. 但数据块测试3. 多数据块测试4. 状态缓冲 前言 本篇除了对flas…

Java JVM 垃圾回收算法详解

Java 虚拟机(JVM)是运行 Java 应用程序的核心,它的垃圾回收(Garbage Collection, GC)机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存,回收那些不再被使用的对象,从而释放内…

VOCs将纳入征税,LDAR系统的排放量计算准确度将要求更加规范,VOCs排放量计算准确度会更加重视,直接影响到税费

笔者见过很多不同公司的LDAR管理系统以及和很多检测公司技术人员沟通,部分技术人员在排放量计算方面尽然不知道中间点等关键要素,有的系统计算排放量不考虑中间点算法、有的计算一年四轮次检测 每轮都是独立计算和上轮检测数据没有任何关系(这…

YOLOv8改进实战 | 引入多维协作注意模块MCA,实现暴力涨点

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8是一种尖端的、最先进的 (SOTA)…

Windows安装anaconda注意事项及jupyter notebook更换目录

anaconda的介绍就不罗嗦了,既然准备安装了,说明你已经有所了解了。直入主题,Anaconda官网下载,实在太慢,可到https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载,注意,这是清华镜像站…

Mysql中的锁机制详解

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决…

新电脑Win11系统想要降级为Win10怎么操作?

前言 现在的电脑大部分都是Windows 11系统,组装机还好一些,如果想要使用Windows 10,只需要在安装系统的时候选择Windows 10镜像即可。 但是对于新笔记本、厂商的成品机、一体机来说,只要是全新的电脑,基本上都是Wind…

黑马JavaWeb开发笔记14——Tomcat(介绍、安装与卸载、启动与关闭)、入门程序解析(起步依赖、SpringBoot父工程、内嵌Tomcat)

文章目录 前言一、Web服务器-Tomcat1. 简介1.1服务器概述1.2 Web服务器1.3 Tomcat 2. 基本使用2.1 下载2.2 安装与卸载2.3 启动与关闭2.4 常见问题 二、入门程序解析1. 起步依赖2. SpringBoot父工程3. 内嵌Tomcat 总结 前言 本篇文章是2023年最新黑马JavaWeb开发笔记14&#x…

[Java]SpringBoot登录认证流程详解

登录认证 登录接口 1.查看原型 2.查看接口 3.思路分析 登录核心就是根据用户名和密码查询用户信息,存在则登录成功, 不存在则登录失败 4.Controller Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;/*** 登录的方法** param …

【Python】一文详细向您介绍 bisect_left 函数

【Python】一文详细向您介绍 bisect_left 函数 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&#x…

shell脚本1----编程规范与变量

shell脚本 shell的功能 Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执…

(前端)面试300问之(3)this的指向判断

一、this的相关理解与解读 1、各角度看this。 1)ECMAScript规范: this 关键字执行为当前执行环境的 ThisBinding。 2)MDN: In most cases, the value of this is determined by how a function is called. 在绝大多数情况下&…

图片损坏,如何修复?

在数字化时代,图片已成为我们日常生活和工作中不可或缺的一部分。然而,有时我们可能会遇到图片损坏的情况,无论是珍贵的家庭照片、工作文档中的关键图像,还是社交媒体上的分享内容,图片损坏都可能带来不小的困扰。那么…

网络传输加密及openssl使用样例(客户端服务器)

文章目录 背景常用加密方式SSLOpenSSL主要功能 库结构 交互流程证书生成生成 RSA 私钥私钥的主要组成部分私钥的格式 创建自签名证书: 签发证书服务器端代码客户端代码常见错误版本问题证书问题证书格式 背景 网络传输中为保证数据安全,通常需要加密 常用加密方式…

Open3D 基于曲率大小的特征点提取

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2提取特征点 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述 基于曲率…

STM32 外部中断(EXTI)

STM32 外部中断(EXTI) 实验:配置一个引脚的下降沿作为外部中断。 参考:江协科技 相关缩写 RCC(Reset and Clock Control) 复位和时钟控制 GPIO(General Purpose Input/Output) 通用输入/输出 AFIO(Alternate Function Input Output) 复用功能输入输…