【原生部署】SpringBoot+Vue前后端分离项目

本次主要讲解SpringBoot+Vue前后端完全分离项目在CentOS云服务器上的环境搭建与部署过程,我们主要讲解原生部署。

一.原生部署概念

原生部署是指将应用程序(一般是指软件、应用或服务)在底层的操作系统环境中直接运行和部署,而不依赖于额外的中间件、框架或虚拟化技术。
在原生部署中,应用程序直接与操作系统进行交互,并利用操作系统提供的资源和功能来执行任务。这种部署方式通常需要考虑操作系统的兼容性和依赖项,以确保应用程序能够正确地在目标操作系统上运行。
原生部署的优点包括:

  1. 性能高:由于没有中间层的额外开销,原生部署的应用程序可以更直接地访问底层系统资源,从而获得更好的性能。
  2. 可控性强:可以直接控制操作系统环境和配置,更容易进行定制和优化,以满足特定的需求。
  3. 可移植性好:原生部署允许将应用程序部署到多个操作系统上,从而实现跨平台的可移植性。

存在的问题:

  1. 平台依赖性:原生部署的应用程序在不同的操作系统或架构上可能会有不兼容性的问题,需要做额外的适配。
  2. 部署复杂性:原生部署通常需要手动进行配置和安装,可能需要额外的管理和维护工作。
  3. 扩展性和弹性:相对于一些云原生或容器化部署方式,原生部署可能在扩展性和弹性方面具有一定的限制。

二.确定所需环境

为了能让项目正常运行,我们需要在Linux服务器上安装了以下软件和工具:
SpringBoot项目:

  • Java Development Kit(JDK): Spring Boot 是一个 Java 框架,需要 JDK来编译和运行。因为 SpringBoot 内嵌 Tomcat,因此我们无需再安装 Tomcat 服务器。
  • Maven: Maven 是一个用于构建和管理 Java 项目的强大工具。 它提供了一种规范化的项目结构和一组标准化的构建配置,以简化项目的构建、依赖管理和项目报告等任务。
  • MySQL(根据项目需要安装):MySQL 是一个强大、稳定且易于使用的关系型数据库管理系统,可以用来存储系统执行时产生的数据。
  • Redis(根据项目需要安装):Redis 是一种开源的基于内存的键值存储系统,也被称为数据结构服务器。由于 Redis 的高性能和基于内存的特性,它常常被用作缓存服务器。将常用的数据放在 Redis 中可以加快数据访问速度,减轻后端数据库的负载。

Vue.js项目:

  • Node.js和npm: Vue.js是一个JavaScript框架,使用Node.js作为运行环境。安装Node.js会自动安装npm(Node包管理器)。
  • Nginx:Nginx 是一个高性能的HTTP和反向代理web服务器。

工具库:

  • Git:Git 是一个分布式版本控制系统,广泛用于协作开发和源代码管理。上传项目代码服务器有两种方式:一是直接从本地拖拽代码文件上传到服务器上,二是使用Git在第三方代码托管平台下载我们上传的代码。

三.搭建环境

注:左边>>右边左边的代表所在文件目录,右边代表的是Linux指令。

1)Java安装

我们可以通过CentOS服务器上的yum指令快速安装好Java环境。

  1. yum安装不用配置环境变量,它直接帮我们安装好了
~>> yum install -y java-1.8.0-openjdk*
  1. 查看java版本,安装成功
~>> java -version
#openjdk version "1.8.0_322"
#OpenJDK Runtime Environment (build 1.8.0_322-b06)
#OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

2)Maven安装

  1. 切换到用来存放软件的目录(自己选择存放位置)
~>> cd /root/services/
  1. 使用curl在线下载Maven安装包
services>> curl -o apache-maven-3.8.5-bin.tar.gz https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
  1. 查看我们下载的安装包
services>> ls
#apache-maven-3.8.5-bin.tar.gz  
  1. 使用tar对压缩包进行解压
services>> tar -zxvf apache-maven-3.8.5-bin.tar.gz
  1. 查看解压出来的安装包
services>> ls
#apache-maven-3.8.5  #apache-maven-3.8.5-bin.tar.gz             
  1. 进入到Maven的bin目录查看可执行文件所在路径
services>> cd apache-maven-3.8.5
apache-maven-3.8.5>> cd bin
bin>> ls
#m2.conf  mvn  mvn.cmd  mvnDebug  mvnDebug.cmd  mvnyjp
//这里的mvn是maven的可执行文件,咱们就是用这个文件去构建项目
  1. 查看并复制当前所在目录路径
bin>> pwd
#/root/services/apache-maven-3.8.5/bin
  1. 添加mvn到环境变量
bin>> vim /etc/profile

按下shift+g将光标定位到最后一行,在path后面添加Maven可执行文件所在路径: /root/services/apache-maven-3.8.5/bin
image.png
编辑完成后按ESC键退出编辑模式,输入:wq然后按下回车键保存退出。

  1. 使文件修改生效
bin>> source /etc/profile
  1. 切换到一个非Maven可执行文件所在目录,例如services,看看环境变量配置是否设置成功,查看maven版本
bin>> cd /root/services/
services>> mvn -v
#Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
#Maven home: /root/services/apache-maven-3.8.5
#Java version: 1.8.0_322, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre
#Default locale: en_US, platform encoding: UTF-8
#OS name: "linux", version: "3.10.0-1160.45.1.el7.x86_64", arch: "amd64", family: "unix"

3)Git安装

  1. Git的下载方式与Java一致
services>> yum install -y git
  1. 查看git版本,检测是否下载成功
services>> git --version
git version 1.8.3.1

4)MySQL安装

(遇到选择都输入y即可)

  1. 下载mysql
services>> yum install mysql
  1. 下载mysql-server(3条指令分别执行)
services>> wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
services>> rpm -ivh mysql-community-release-el7-5.noarch.rpm
services>> yum install mysql-community-server
  1. 下载mysql-devel
services>> yum install mysql-devel
  1. 安装完成后启动MySQL服务
services>> systemctl start mysqld
  1. 设置mysql服务开机自启动
services>> systemctl enable mysqld

MySQL数据库相关指令:

systemctl disable mysqld  //停止mysql服务开机自启动
systemctl status mysqld //查看mysql服务当前状态
systemctl restart mysqld //重启mysql服务
systemctl stop mysqld //停止mysql服务
  1. 初次安装mysql,root账户没有密码,为了保证数据库的安装,我们需要设置一个比较复杂的密码,首先进入到mysql内部:
services>> mysql -u root 
#Welcome to the MySQL monitor.  Commands end with ; or \g.
#Your MySQL connection id is 2
#Server version: 5.6.51 MySQL Community Server (GPL)...
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql>
  1. 进入到mysql内部后输入如下命令设置密码
 mysql> set password for 'root'@'localhost' =password('root用户密码');
  1. (接下来为可选步骤,如若不进行,连接时使用root账户)为了安全起见,强烈建议在远程连接的时候使用非root账户,我们需新建一个账户并授予权限
 mysql> create user '用户名'@'%' identified by '密码' with grant option;
 或者
 mysql> create user '用户名'@'%' identified with mysql_native_password by '密码';
 
注意:mysql8.0及以上版本需要使用以下语句:
mysql> create user 用户名@'%' identified by '密码';
  1. (步骤8配套可选项)把在所有数据库的所有表的所有权限赋值给该新建用户
mysql> grant all privileges on *.* to 用户名@'%' with grant option;
  1. (步骤8配套可选项)刷新权限使操作生效,并退出mysql
mysql> FLUSH PRIVILEGES;
mysql> quit
Bye
  1. 修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,配置mysql默认编码为utf-8:
>> vim /etc/my.cnf
 [mysqld]
 character_set_server=utf8
 init_connect='SET NAMES utf8'

输入vim /etc/my.cnf 进入到文件内,按 i 进入编辑模式,把编码配置粘贴到[mysqld]的下面。

添加完编码配置后,按ESC键退出编辑模式,输入:wq并按回车,重新回到命令行界面

  1. 重启MySQL
>> systemctl restart mysqld

5)Nginx安装

  1. 进入到nginx 官网,选择需要安装的版本,点击鼠标右键复制链接地址

  1. 把nginx安装包下载下来,并改名为nginx-1.20.2.tar.gz
services>> curl -o nginx-1.20.2.tar.gz http://nginx.org/download/nginx-1.20.2.tar.gz
#  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#                                 Dload  Upload   Total   Spent    Left  Speed
#100 1037k  100 1037k    0     0  48743      0  0:00:21  0:00:21 --:--:-- 46562
services>> ls
#  nginx-1.20.2.tar.gz
  1. 解压压缩包
services>> tar -zxvf nginx-1.20.2.tar.gz
services>> ls
# nginx-1.20.2  nginx-1.20.2.tar.gz
  1. 进入到nginx目录
nginx-1.20.2>> cd nginx-1.20.2
nginx-1.20.2>> ls
#auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
  1. 安装相关依赖
nginx-1.20.2>> yum install pcre pcre-devel -y
nginx-1.20.2>> yum install openssl openssl-devel -y
  1. 设置系统配置参数
nginx-1.20.2>> ./configure --with-http_ssl_module --with-http_v2_module --with-stream
  1. 开始编译
nginx-1.20.2>> make

# 如果编译报错:make: *** No rule to make target `build', needed by `default'.  Stop.
# 则需要安装下面配置
# 安装下面配置
>> yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
# 重新configure
>> ./configure 
# 编译
>> make
  1. 安装
nginx-1.20.2>> make install 
  1. 配置环境变量
nginx-1.20.2>> vim /etc/profile 

# 按下shift+g将光标定位到最后一行,新增以下内容:
export PATH=$PATH:/usr/local/nginx/sbin	

按 i 进入编辑模式,把新增的内容放到/etc/profile 文件内的最后一行就可以了,按ESC键退出编辑模式,然后输入:wq 再按下enter即可保存退出

  1. 使文件修改生效
source /etc/profile
  1. 查看当前所有tcp端口/查看启动情况,可以看到我们启动的MySQL和Nginx服务
nginx-1.20.2>> netstat -ntlp
Active Internet connections (only servers)
#Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
#tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8210/nginx: master
#tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1648/sshd      
#tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1120/master    
#tcp6       0      0 :::22                   :::*                    LISTEN      1648/sshd      
#tcp6       0      0 ::1:25                  :::*                    LISTEN      1120/master    
#tcp6       0      0 :::3306                 :::*                    LISTEN      10626/mysqld 

6)Redis安装

  1. 进入到redis 官网,选择需要安装的版本,点击鼠标右键复制链接地址

image.png

  1. 在服务器上使用命令在线下载,并改名为redis-6.2.5.tar.gz
~>> curl -o redis-6.2.5.tar.gz http://download.redis.io/releases/redis-6.2.5.tar.gz
  1. 解压文件
~>> tar -zxvf redis-6.2.5.tar.gz
  1. 安装gcc依赖环境,由于Redis依赖于gcc环境,并且Redis 6需要gcc版本至少是gcc7以上
~>> yum install gcc
  1. 编译并安装
#切换到 redis目录
~>> cd redis-6.2.5/
# 编译
redis-6.2.5>> make
# 安装
redis-6.2.5>> make install
  1. 切换到默认安装路径为/usr/local/bin目录
# 切换到安装路径
redis-6.2.5>> cd /usr/local/bin
# 查看文件
bin>> ls

  1. 启动redis:redis的启动分为两种方式:前台启动和后台启动。由于前台启动后,命令行界面不能再执行其他操作,且命令行界面关闭后,redis也会随即关闭,所以不推荐使用。
  • 前台启动命令(bin目录下)
bin>> redis-serve

image.png

  • 后台启动:Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
bin>> cd /root/redis-6.2.5
redis-6.2.5>> cp redis.conf redis.conf.bak
redis-6.2.5>> vim redis.conf

在vim界面命令行模式下输入/daemonize no进行查找,然后按i进入编辑模式,并将该内容修改为··daemonize yes··,然后按Esc键,输入:wq再按enter键保存退出

重新切换到bin目录启动则是后台运行了

redis-6.2.5>> cd /usr/local/bin
bin>> redis-server /root/redis-6.2.5/redis.conf

image.png

  1. 设置密码,没有密码肯定是不安全的
bin>> cd /root/redis-6.2.5
redis-6.2.5>> vim redis.conf

在vim界面命令行模式下输入/requirepass进行查找,然后按i进入编辑模式,在右边输入密码,然后按Esc键,输入:wq再按enter键保存退出
image.png

  1. 关掉redis并重新启动
bin>> redis-cli shutdown
bin>> redis-server /root/redis-6.2.5/redis.conf
  1. 启动并输入密码重新进入

image.png

7)Node.js安装

  1. 进入到node.js,选择需要安装的版本,点击鼠标右键复制链接地址

image.png

  1. 在服务器上使用命令在线下载,并改名为node-v20.10.0.tar.gz
~>> curl -o node-v16.15.1.tar.gz https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz
  1. 解压压缩包
~>> tar -xvf node-v16.15.1.tar.gz
  1. 切换到bin目录下,查看是否安装成功
~>> cd node-v16.15.1-linux-x64/bin
bin>> ./node -v
# v16.15.1
  1. 获取bin文件路径,配置环境变量
~>> pwd
# /root/node-v16.15.1-linux-x64/bin
~>> vim /etc/profile

在vim界面命令行模式下,然后按i进入编辑模式,在最后配置bin目录所在路径/root/node-v16.15.1-linux-x64/bin,然后按Esc键,输入:wq再按enter键保存退出
image.png

  1. 使配置文件生效
source /etc/profile
  1. 在其他目录输入指令查看是否配置生效,如下表示生效

image.png

四.项目部署

项目所需的基本环境我们已经全部搭建完毕,上述环境并不是一定全部都得用到,我们有两套部署方案:

  • JAVA、MySQL、Redis、Nginx:本地打包好前后端项目,然后上传到服务器上直接部署运行即可。
  • JAVA、MySQL、Redis、Nginx、Node.js、Git、Maven:使用Git从远程代码仓库拉下代码,springboot项目使用maven进行打包编译,vue.js项目使用node.js打包编译,最后再部署运行即可。

由于第二种方案步骤完全覆盖第一种方案,我们便主要讲解第二种方案。非常重要的一点是最后在防火墙开启项目使用到的端口号!!!

1)拉取代码

使用如下指令拉取远程代码仓库前后端项目代码即可

~>> git clone https://xxxxxxx代码地址xxxxxx

2)打包部署

  • 前端项目(这一步主要是为了获取dist文件,也就是说可以自己在本地打包好后直接上传dist文件):
  1. 切换到拉下的前端项目里
~>> cd 前端项目名
  1. 进行打包构建,在项目根目录下运行以下命令:
前端项目名>> npm run build

这将生成一个dist目录,其中包含一组静态文件,包括HTML、CSS和JavaScript文件。

  1. 修改Nginx配置文件,设置前端项目所在路径
前端项目名>> cd /usr/local/nginx/conf

conf>> vim nginx.conf

修改文件内容为:
user  root;(修改的地方)
worker_processes  1;
....(省略)....
location / {
  root   /root/services/前端项目名/dist;(前端项目dist目录路径)
  index  index.html index.htm;
}
....(省略)....
然后按ESC键退出编辑模式,按 :wq  保存退出 

image.png

  1. 更新配置文件
conf>> nginx -s reload
  1. 如此我们便完成了前端项目的部署,最后需要自己去防火墙开放使用到的端口号
  • 后端项目(这一步主要是为了获取jar包,也就是说可以自己在本地打包好后直接上传jar包):
  1. 切换到拉下的后端项目里面
~>> cd 后端项目名
  1. 在项目根目录下运行以下命令,进行打包构建,跳过测试
后端项目名>> mvn package -DskipTests
  1. Maven将在项目目录下生成一个target目录,其中包含我们需要的可执行JAR文件。
后端项目名>> cd target
  1. 启动项目(执行jar包)
target>> java -jar ./自己打包出来的.jar --spring.profiles.active=prod
# 当然这么用的话,这个窗口就不能做任何事了,被这个命令占满了,按ctrl+c中断它
# 让它在后台运行
target>> nohup java -jar ./自己打包出来的.jar --spring.profiles.active=prod &
  1. 如此我们便完成了后端项目的部署,最后需要自己去防火墙开放使用到的端口号
# 可以看见它正在运行
user-center-backend>> jobs
#[1]+  Running                 nohup java -jar ./后端项目名.jar --spring.profiles.active=prod &

//这里可以看到java在8080端口启动了
user-center-backend>> netstat -ntlp
#Active Internet connections (only servers)
#Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
#tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1393/sshd      
#tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1396/master    
#tcp6       0      0 :::3306                 :::*                    LISTEN      1441/mysqld    
#tcp6       0      0 :::8080                 :::*                    LISTEN      4367/java      
#tcp6       0      0 :::22                   :::*                    LISTEN      1393/sshd      
#tcp6       0      0 ::1:25                  :::*                    LISTEN      1396/master 

//用jps也可以看到运行的java程序
user-center-backend>> jps
#7298 Jps
#4367 后端项目名.jar
  1. 后端项目管理常用命令
# 1.关闭后台Java项目
# 1.1.查看过滤出Java项目
ps -elf |grep java
# 1.2 根据pid杀死进程
kill -9 PID

# 2 查看后台启动项目
jobs # 查看后台项目
netstat -ntlp # 查看端口占用情况
jps # 查看运行的Java程序

# 3.日志查看
# 查看最新100行日志
tail -n 100 nohup.out | more
# 实时查看日志
tail -f nohup.out

至此我们便算是完成了整个项目的开发环境搭建与部署~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大语言模型会带来了新一波人工智能浪潮?

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

基于 InternLM 和 LangChain 搭建你的知识库

基于 InternLM 和 LangChain 搭建你的知识库 大模型开发范式LLM的局限性:RAG 检索增强生成 LangChain简介构建向量数据库搭建知识库助手Web Demo部署环境配置下载 NLTK 相关资源下载本项目代码 大模型开发范式 LLM的局限性: 知识实效性受限&#xff1a…

实用Unity3D Log打印工具XDebug

特点 显示时间,精确到毫秒显示当前帧数(在主线程中的打印才有意义,非主线程显示为-1)有三种条件编译符(如下图) 注:要能显示线程中的当前帧数,要在app启动时,初始化mainThreadID字段条件编译符…

8.1、5G网络切片认识篇

首先,3G上网时代来临,流量高速增长,但是网络资源有限,不可能保证所有业务都能全速进行,总得捡重要的首先保障,因此就对业务进行分类,给予不同优先级的业务不同的资源,不同的服务质量…

基于filter的内存马

主要是通过过滤器来拦截severlet请求中的参数,作为过滤器中的参数,来调用自定义过滤器中的恶意函数 在这里我们分析一下filter的实现原理,循序渐进 Demo1: 直接使用filter模拟内存马效果: 1.配置一个简单的severlet的…

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果 下载地址 uni-app官方插件市场: cc-comment组件 环境 基于vue3.2和uni-ui开发; 依赖版本参考如下: "dependencies": {"dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","dcloudio/uni-ui": "^1.4.28","…

flask+mysql徐州市天气信息可视化分析系统-计算机毕业设计源码04600

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对天气信息等问题,对天气信息进行…

深度学习在交通标志识别中的应用

深度学习在交通标志识别中的应用 深度学习在交通标志识别中的应用1. 交通标志识别的背景2. CNN在交通标志识别中的应用3. 数据集准备4. 模型训练与优化5. 模型评估与部署结语 深度学习在交通标志识别中的应用 交通标志是道路上的重要元素,它们提供了关键的信息&…

网络的设置

一、网络设置 1.1查看linux基础的网络设置 网关 route -n ip地址ifconfigDNS服务器cat /etc/resolv.conf主机名hostname路由 route -n 网络连接状态ss 或者 netstat域名解析nslookup host 例题:除了ping,什么命令可以测试DNS服务器来解…

机器学习系列--R语言随机森林进行生存分析(2)

随机森林(Breiman 2001a)(RF)是一种非参数统计方法,需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术,通过拟合一组树来稳定预测精度模型估计。随机生存森林(RSF&#xff0…

【算法分析与设计】移动零

题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0…

【Github-Action】统计整个社区所有项目的贡献

thinkasany/organize-contributors 介绍🚀谁在用我效果🍔 使用指南示例仓库mdpagesyml配置yml demo 介绍 项目地址 如果你对github-action感兴趣,还可以看这篇文章, 这篇文章教会你如何开发Github Action,并且让你明…

2024年跨境电商上半年有哪些营销节日?

2024年伊始,跨境电商开启新一轮的营销竞技,那么首先需要客户需求,节假日与用户需求息息相关,那么接下来小编为大家整理2024上半年海外都有哪些节日和假期?跨境卖家如何见针对营销日历选品,助力卖家把握2024…

JavaScript中解锁Map和Set的力量

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更…

调试器加载错误,从任务栏打开可能会导致该问题 2024/1/8

🧧喜欢将常用软件固定在任务栏的用户肯定很苦恼这个问题 🧧问题复现 🧧这里先查找一下原因 🧧查看一下固定在任务栏的微信小程序开发工具的属性 如果不会打开任务栏图标属性界面的小伙伴请先翻到文章最后 🧧再使用同样…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)二

第三部分、栈(Stack)和队列(Queue)详解 栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解。 使用栈…

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存,并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器, JVM类加载机制类加载…

「 CodeQL从入门到精通系列 」03.CodeQL常用术语介绍

相比其他代码检测工具,CodeQL中定义了很多专用术语,为了更快上手后续章节,本文对接下来要用到的术语做了统一汇总与解读。 1. 查询语言(QL) QL是一种声明性、面向对象的查询语言,经过优化,可实现对分层数据结构&#…

kafka入门(六):日志分段(LogSegment)

日志分段(LogSegment) Kafka的一个 主题可以分为多个分区。 一个分区可以有一至多个副本,每个副本对应一个日志文件。 每个日志文件对应一个至多个日志分段(LogSegment)。 每个日志分段还可以细分为索引文件、日志存储…

mybatis plus相同Id与xml配置错误时,mybatis plus解决逻辑

前言 处理做项目的问题,其中不乏奇奇怪怪的问题,其中mybatis plus的问题感觉有点隐蔽,有些是运行时出现,有些是运行到具体的逻辑触发,对于应用的状态监控提出了极大的挑战,应用的状态由健康检查接口提供&a…