当前位置: 首页 > news >正文

Gitlab SSH Jenkins Pipeline Supervisor部署

Gitlab SSH Jenkins Pipeline方式部署

准备搞一搞简单部署SpringBoot项目的一种方式,通过Gitlab+ssh +Jenkins Pipeline的方式,简单学习下。

环境准备

本地域名ip地址安装软件作用
server01192.168.110.110Gitlab代码托管
server02192.168.110.111Jenkins持续集成

虚拟机

静态IP

两台虚拟机设置了静态ip,防止老变更,设置了本地域名

静态IP,以192.168.110.111为例

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
IPADDR="192.168.110.111"
NETMASK="255.255.255.0"
GATEWAY="192.168.110.1"
DNS1="192.168.110.1"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="7db205e0-c8ad-4f4a-8375-c436cbbed3cf"
DEVICE="ens32"
ONBOOT="yes"

静态地址的ip可以自己配置,但是同一网段不能出现重复的ip,网关可以自己去宿主机看下网关的地址。

# 重启一下网络配置以生效
service network restart

本地域名

192.168.110.111为例

sudo hostnamectl set-hostname server02

在宿主机设置好域名映射,windows系统在C:\Windows\System32\drivers\etc\hosts文件中

192.168.110.110 server01
192.168.110.111 server02
  • Gitlab版本:12.3.9
  • Jenkins:2.503,依赖Java17版本
  • Git:2.41.0版本,最好把Git版本拉到2.xxx以上,否则可能出现不兼容的情况,拉取代码报错

安装Gitlab

server01机器上,直接在网上找个国内镜像加速的,速度下载,清华源Gitlab-ce(el7)

这里给个在线下载的地址,可以试试,成功率不高的话去网页下载好在整到虚拟机里面

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm

安装

# 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix# 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd# 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix# 开放ssh以及http服务,然后重新加载防火墙列表 若关闭防火墙,那么下面这三条命令不需要执行
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload# 开始安装命令
npm -ivh gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm

做一些配置,端口80若是已经占用了,可以更改一下,同时nginx监听的端口也要更改:

vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.110.110:82'
nginx['listen_port'] = 82
# 使配置生效
gitlab-ctl reconfigure# 重启
gitlab-ctl restart# 防火墙端口
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

命令执行完毕就安装完成并且配置好了,那么可以直接通过server01:82访问了,第一次进入的时候应该需要设置新密码的,我这里已经设置过了。

在这里插入图片描述

代码准备

这个随便搞个SpringBoot的项目都可以的,来个接口就行,然后把项目上传到server01的Gitlab上。

<properties><java.version>17</java.version>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

java

@RestController
public class HelloController {@RequestMapping("/hello")public String hello() {return "Hello World!";}}

Gitlab添加ssh

在这里插入图片描述

使用root用户生成公钥和私钥

ssh-keygen -t rsa

在这里插入图片描述

id_rsa:私钥文件

id_rsa.pub:公钥文件

把生成的公钥放在Gitlab中

以root账户登录->点击头像->Settings->SSH Keys,复制刚才id_rsa.pub文件的内容到这里,点击"Add Key"

在这里插入图片描述

Jenkins环境准备

安装2版本的Git

最好把Jenkins的那台服务器上的Git升级为2.xx版本,因为有过踩坑经验,但好像又有点概率性,升级之后就完全不报错了。

# 先安装源
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm# 安装git
yum install -y git

把项目传上来

在Gitlab中先将项目创建好…

在这里插入图片描述

安装

Jenkins的安装,可以用rpm包的方式,先到网上下载一个或者在线下载都可以,注意下啊,Java需要的版本是17,先安装好Java再来安装Jenkins,Jenkins依赖java环境,环境不兼容是安装不了滴。

# 提供一个下载的地址,下载不了的话就直接在页面上去下载装到虚拟机就行
wget https://mirrors.jenkins-ci.org/redhat/jenkins-2.503-1.1.noarch.rpm
# 安装一下
rpm -ivh jenkins-2.503-1.1.noarch.rpm

新版的Jenkins好像没有/etc/syscofig/jenkins这个文件了,启动的时候直接把这些配置文件放到systemctl管理的配置里面的,具体的配置地址如下:

vim /usr/lib/systemd/system/jenkins.service
# 用户
User=root
# 用户组
Group=root
# 改一下java的环境
Environment="JAVA_HOME=/usr/local/jdk/jdk-17.0.14"
# 改一下端口,不改也行
Environment="JENKINS_PORT=8888"
# 配置生效
systemctl daemon-reload# 重启jenkins
sudo systemctl restart jenkins

有防火墙关一下,不想关就把端口开一下。

firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
# 启动Jenkins即可
systemctl start jenkins# 有需要设置开机自启
systemc	enable jenkins

准备

在系统中将jdk,maven,git都下载安装完毕后,在Jenkins的插件管理中把maven和git的插件下载一下,然后把maven和git的地址在Jenkins的全局工具中配置下。

在这里插入图片描述

jdk配置

在这里插入图片描述

maven配置

在这里插入图片描述

git配置

在这里插入图片描述

把ssh在Jenkins中配置一下。

在这里插入图片描述

Jenkins Pipeline

将Pipeline插件在Jenkins中安装一下。

在这里插入图片描述

创建一个Pipeline的项目

在这里插入图片描述

流水线项目灵活度比较高,比较推荐使用。

把相关的pipeline脚本完善下

pipeline {agent anystages {stage('拉取代码') {steps {checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ssh-auth', url: 'git@192.168.110.110:root/test110.git']])}}stage('编译构建') {steps {sh 'mvn clean package'}}stage('执行部署') {steps {sh 'cp target/test-0.0.1-SNAPSHOT.jar /root/demo/demo.jar'sh 'supervisorctl restart demo'}}}
}
  • stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage

  • stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段

  • steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内

脚本中共写了三个stage步骤,分别将拉代码,编译,部署都进行了流水线化。

我这里直接用linux中一个进程管理工具将项目给进行管理了,个人总结的经验发现:使用nohup java -jar ...的失败率太高了,总是莫名其妙卡住或者报错…

Supervisor

做一下supervisor的配置,详细配置可以参考我的博客:linux进程管理工具supervisor详细配置。

这里简单做下配置:

yum install -y epel-release 
yum install -y supervisor
vim /etc/supervisord.conf
[include] files = supervisord.d/*.conf

/etc/supervisord.d/中创建一个demo.conf的文件,然后配置如下:

[program:demo]
command=java -jar /root/demo/demo.jar
stdout_logfile=/root/demo/logfile.log
autostart=true
autorestart=false
startsecs=5
stopasgroup=true
killasgroup=true
# 启动主程序,如果已经启动了,杀掉主进程再执行这个命令
supervisord -c /etc/supervisord.conf# 开机自启动
systemctl enable supervisord

相关文章:

Gitlab SSH Jenkins Pipeline Supervisor部署

Gitlab SSH Jenkins Pipeline方式部署 准备搞一搞简单部署SpringBoot项目的一种方式&#xff0c;通过Gitlabssh Jenkins Pipeline的方式&#xff0c;简单学习下。 环境准备 本地域名ip地址安装软件作用server01192.168.110.110Gitlab代码托管server02192.168.110.111Jenkins…...

Python Pandas实现导出两个Excel数据集的分组记录数分析

编写Python Pandas代码实现从一个Excel文件中的一个Sheet中的表格里取两个维度字段&#xff0c;根据这两个维度字段的数据分组统计&#xff0c;计算记录数的分组总计值&#xff0c;得到一个包含两个维度字段和记录数字段的分组总计值字段的dataframe&#xff0c;再从另一个Exce…...

维港首秀!沃飞长空AE200亮相香港特别行政区

4月13日-16日&#xff0c;第三届香港国际创科展在香港会议展览中心盛大举办。 作为国内领先、国际一流的eVTOL主机厂&#xff0c;沃飞长空携旗下AE200批产构型登陆国际舞台&#xff0c;以前瞻性的创新技术与商业化应用潜力&#xff0c;吸引了来自全球17个国家及地区的行业领袖…...

PyTorch 根据官网命令行无法安装 GPU 版本 解决办法

最近遇到一个问题&#xff0c;PyTorch 官网给出了 GPU 版本的安装命令&#xff0c;但安装成功后查看版本&#xff0c;仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现&#xff0c;需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——USB…...

Java基础-超全总结

1.Java中的基本数据类型 Java中有四类八种基本的数据类型&#xff0c;四类数据类型包括整型、浮点型、字符型、布尔型。 整型包括&#xff1a;byte、short、int和long浮点型包括&#xff1a;float和double字符型是char布尔型是boolean。 2.Java中的包装类型和基本类型的区别…...

区块链技术在数据隐私保护中的应用:从去中心化到零知识证明

区块链技术在数据隐私保护中的应用&#xff1a;从去中心化到零知识证明 在数字化时代&#xff0c;数据隐私已成为全球关注的焦点。无论是个人身份信息、医疗数据还是企业的敏感业务数据&#xff0c;都面临着泄露、篡改和滥用的风险。传统的安全方案依赖中心化服务器进行加密和…...

【大模型实战篇】--阿里云百炼搭建MCP Agent

MCP协议&#xff08;Model Communication Protocol&#xff0c;模型通信协议&#xff09;是大语言模型&#xff08;LLM&#xff09;与外部系统或其他模型交互时的一种标准化通信框架&#xff0c;旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...

Android ExifInterface rotationDegrees图旋转角度,Kotlin

Android ExifInterface rotationDegrees图旋转角度&#xff0c;Kotlin import android.media.ThumbnailUtils import android.os.Bundle import android.util.Log import android.util.Size import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity …...

linux 内核 ida机制分析

在描述ida之前,需要读者对linux 内核的radix-tree有一定的了解。关于radix-tree(基数树)的描述,作者在之前有专门的文章对其进行描述,这里不再赘述。 IDA是什么?内核文档中解释如下: /*** IDA description** The IDA is an ID allocator which does not provide the ab…...

linux-定时任务清理buffer、cache

在清理 buffer 和 cache 之前&#xff0c;调用 sync 命令是一个好习惯。sync 会将文件系统缓冲区中的数据强制写入磁盘&#xff0c;确保数据的一致性&#xff0c;避免数据丢失的风险。以下是改进后的脚本&#xff0c;增加了多个 sync 语句&#xff1a; 1、脚本内容&#xff1a;…...

Linux常用命令整理

Linux 系统提供了大量常用命令行工具,涵盖文件操作、权限管理、网络诊断、软件安装、系统监控、脚本编程等各个方面。下面按照不同功能类别,整理常用的 Linux 命令及其中文说明和使用示例。 文件与目录操作 ● ls:列出目录内容,用于显示指定目录下的文件和子目录。常用参数…...

Python爬虫第14节-如何爬取Ajax的数据

目录 前言 一、什么是Ajax 1.1 具体举例 1.2 基本原理 二、Ajax的分析 2.1 查看请求 2.2 过滤请求 三、解析提取Ajax 结果 3.1 分析请求 3.2 分析响应 四、Ajax抓取实战 前言 咱们在使用requests抓取网页的时候&#xff0c;常常会发现&#xff0c;得到的结果和在浏览…...

mac上面使用zip命令压缩一劳永逸

问题 需要将当前目录的文件和目录&#xff08;包含隐藏目录&#xff09;都要压缩近一个zip包&#xff0c;但同时部分目录我不想压缩进去例如&#xff1a;.idea这个种idea的配置目录就不想压缩进zip包。 命令 zip -r flask-dev.zip . -x "*.idea*"-r:递归目录.:当前…...

​​错误地使用了 app.use() 来注册全局组件

我是import globalComponent from "/components"; /* eslint-disable */ // ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; /* prettier-ignore */ declare module vue { export interface…...

Python Django基于协同过滤算法的招聘信息推荐系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

鹰角:EMR Serverless Spark 在《明日方舟》游戏业务的应用

作者&#xff1a;鹰角网络高级大数据研发 茅旭辉 背景介绍 鹰角网络是一家年轻且富有创新的游戏公司&#xff0c;致力于开发充满挑战性和艺术价值的游戏产品。公司目前涵盖了游戏开发、运营和发行的全生命周期业务。随着业务的扩展&#xff0c;鹰角网络从单一爆款游戏发展到多…...

C语言学习之两个数值交换的算法

前言&#xff1a;本篇文章仅仅是作为作者复习使用 在C语言中&#xff0c;交换两个两个变量的数值是很常见的应用。在学习到指针的时候&#xff0c;我们已经掌握了几种交换的算法了。今天我来做一个小汇总 1创建第三个变量 缺点&#xff1a;需要创造第三个变量 2加减交换 缺点…...

CExercise_13_1排序算法_2归并排序

题目&#xff1a;CExercise_ 请手动实现归并排序算法&#xff1a; void merge_sort(int arr[], int len) 如果学有余力&#xff0c;不妨尝试一下多种临时数组的方式&#xff1a; 1.局部变量数组 2.全局变量数组 3.堆数组 关键点 分析&#xff1a; &#xff1a; 代码 代码块解决…...

富斯i6遥控器,无法切换通道解决办法

开机后长按【OK】键&#xff0c;进入设置 按【DOWN】选择【setup】 点击【ok】进入设置 再点击【OK】进入Reverse 将2设置为下&#xff0c;长按【cancel】保存&#xff0c;返回到设置 进入【Aux.channels】 将第二行【Source】设置为【Source SwC】,长按【CANCEL】保存并返回。…...

Maven 编译指定模版

背景 基于SpringCloud 做的微服务项目&#xff0c;很多都是依赖公共模块下的包&#xff0c;并且多模板都是在一个项目下的。 问题 每次打包都很编译整个项目下的所有模块。这样太耗时间了&#xff0c;把流水线的时间拖的太长了。 解决方案 在maven打包时&#xff0c;我们选…...

solr安装及ik中文分词器配置

提示&#xff1a;solr9.x版本需要jdk17&#xff0c;solr8.x版本需要jdk8 1、Solr 简介 Solr 是Apache 下的一个顶级开源项目&#xff0c;采用 Java 开发&#xff0c;它是基于 Lucene 的全文搜索服务器。Solr 提供了比 Lucene 更为丰富的查询语句&#xff0c;同时实现了可配置、…...

详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解

目录 题目背景 代码整体逻辑 变量初始化 逐位相加过程 处理最后进位 结果反转 示例演示 总结 在LeetCode中&#xff0c;有一道经典的算法题是实现两个字符串形式的非负整数相加&#xff0c;今天我们就来深入分析一段用C实现该功能的代码&#xff0c;探究其背后的逻辑与…...

vue学习笔记06

学习的课程地址&#xff1a;老杜Vue视频教程&#xff0c;Vue2&#xff0c;Vue3实战精讲&#xff0c;一套通关vue_哔哩哔哩_bilibili 1、vue程序初体验 2、vue核心技术(基础) 3、Vue组件化 前面参见&#xff1a; vue学习笔记01 vue学习笔记02 vue学习笔记03 vue学习笔记…...

如何查看自己抖音的IP属地?详细教程及如何修改

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台&#xff08;如抖音、微博、快手等&#xff09;展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答&#xff0c;帮助您快速了解相关信息&#xff1a; 一、如何查看抖音账号的IP属…...

熟悉Linux下的编程

可能 目录 熟悉Linux下Python编程的含义及与非Linux环境编程的区别 一、核心含义解析 二、与非Linux环境的关键区别 三、典型应用场景对比 四、能力培养建议 openfoem的下载之路&#xff1a; 方法一&#xff1a;使用cd命令 方法二&#xff1a;使用快捷方式 方法三&am…...

Uniapp:获取当前定位坐标

目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中&#xff0c;会出现打卡、定位当前位置的功能&#xff0c;那我们如何获取当前位置呢&#xff1f;这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...

GitHub实用手册

文章目录 一、GitHub 的定义二、GitHub 的主要功能三、GitHub 的优势四、GitHub 的使用相关工具GitSourcetreeGithub-Desktop 一、GitHub 的定义 GitHub 是一个基于 Git 的分布式版本控制系统&#xff0c;它允许开发者在本地和远程仓库中管理代码版本&#xff0c;支持多人协作…...

【从零实现高并发内存池】Central Cache从理解设计到全面实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)

前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划&#xff0c;今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...

Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)

Spring AI 发布了它的 1.0.0 版本的第七个里程碑&#xff08;M7&#xff09;&#xff0c;下个月就是 RC1&#xff0c;紧接着就是 GA&#xff01;&#xff0c;对于我们 Java 开发者来说&#xff0c;这绝对是个值得关注的好消息&#xff01; 但是对于 Java 学习者来说&#xff0c…...

如何从 GitHub 镜像仓库到极狐GitLab?

最近 GitHub 封禁中国用户的事情闹得沸沸扬扬&#xff0c;虽然官方发布的报道说中国用户被限制登录是因为配置错误导致&#xff0c;已经撤回了更新&#xff0c;中国用户已经可以正常使用。但是这就像横在国内开发者和企业头上的“达摩克利斯之剑”。为了避免 GitHub 不可用而带…...

大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机

摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5&#xff0c;该产品集成地瓜机器人 RDK X5 开发者套件&#xff0c;深度整合双方在硬件研发与智能计算领域的技术优势&#xff0c;实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...

在Android Studio中,`Settings`里的Gradle路径、环境变量以及`gradle - wrapper.properties`文件关联

在Android Studio中,Settings里的Gradle路径、环境变量以及gradle - wrapper.properties文件关联 Android Studio中Settings里的Gradle路径 在Android Studio的Settings(Preferences ) -> Build, Execution, Deployment -> Build Tools -> Gradle 中: Use defau…...

用react 写一个可左右滑动的柱状图

效果图 目录 效果图 ✅ 项目结构 &#x1f680; 创建项目步骤 1️⃣ 打开终端或命令行&#xff0c;创建新项目&#xff1a; 2️⃣ 安装 recharts 图表库&#xff1a; 3️⃣ 替换默认代码&#xff1a; 4️⃣ 启动项目&#xff1a; ✅ 项目结构 scrollable-bar-chart/ ├…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——MIPI LCD测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;www.alientek.com 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——MIPI LCD测试4.3 MIPI LCD测试4.3.1 使…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS485串口测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;www.alientek.com 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS485串口测试 第四章 ATK-DLMP257B功能…...

Sui 的工具生态简化了游戏开发者的 Web3 集成流程

希望利用 Web3 独特协同效应的游戏开发者&#xff0c;常常在强大的区块链功能与流畅的游戏体验之间难以权衡。许多区块链方案要求大幅重构游戏基础架构&#xff0c;增加了开发难度&#xff0c;甚至需要学习全新的智能合约语言。而 Sui 通过直观的工具消除这一阻力&#xff0c;使…...

Vue 3 的组合式 API-hooks

Vue 3 的组合式 API 组合式 API 是 Vue 3 的核心特性之一&#xff0c;它允许开发者将组件的逻辑拆分为可复用的函数。组合式 API 的主要特点是 逻辑复用&#xff1a;将逻辑提取到独立的函数中&#xff0c;方便在多个组件中复用。组织清晰&#xff1a;将相关的逻辑分组&#x…...

AOSP Android14 Launcher3——底部任务栏Taskbar详解

前言&#xff1a;Launcher3中底部Taskbar和Navbar&#xff0c;或者说中文里面的术语导航栏&#xff0c;这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看&#xff0c;Taskbar就是任务栏&#xff0c;任务栏是Launcher3中一个重要的组件&#xff0c;尤其…...

QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(五)QGraphicsView的缩放和移动

QGraphicsView自带滚动条的显示&#xff0c;但是大部分的需求样式都不需要滚动条&#xff0c;并且要通过鼠标来控制视图的缩放和移动。需要重写QGraphicsView实现。 一、相关函数 1.scale void QGraphicsView::scale(qreal sx, qreal sy) 按&#xff08;sx&#xff0c;sy&…...

算法——果蝇算法

果蝇算法&#xff08;Fruit Fly Optimization Algorithm&#xff0c;FOA&#xff09;是一种受果蝇觅食行为启发而开发的群智能优化算法。以下从算法原理、算法流程、算法特点等方面为你详细讲述&#xff1a; 算法原理 果蝇本身具有优于其他物种的嗅觉和视觉。在觅食过程中&am…...

重返JAVA之路——图书管理系统

目录 一、功能介绍 二、设计模块 三、系统构建 1.book模块 2.operation模块 输入循环和验证 查找图书并处理借阅状态 未找到图书的处理 查找删除图书功能实现 未找到图书的处理 图书查找与归还 work方法实现图书信息输出 3. user模块实现 四、主菜单 一、功能介绍 …...

【16】数据结构之基于树的排序算法篇章

目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想&#xff1a;从待排序的序列中选出最大值或最小值&#xff0c;交换该元素与待排序序列的头部元素&#xff0c;对剩下的元…...

Uniapp:确认框

目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中&#xff0c;会经常出现删除数据的情况&#xff0c;如果直接删除的话&#xff0c;可能会存在误删&#xff0c;用户体验不好&#xff0c;所以需要增加一个消息提示&#xff0c;提醒用户是否删除。 二…...

pyswmm实现洪涝模拟

准备好.inp文件作为SWMM模型输入&#xff0c;调用pyswmm模块执行模拟&#xff0c;返回节点溢流量&#xff08;flooding&#xff09;作为积水量的初步表征。 代码&#xff1a; from pyswmm import Simulation, Nodes import pandas as pddef run_swmm_simulation(inp_file, ou…...

My Diary Pro:记录生活,珍藏回忆

我的日记My Diary Pro是一个非常好用的手机日记软件&#xff0c;可以使用它来记录每日生活日常&#xff0c;不少的用户可能都知道在生活之中可能会发生一些比较的重要的事情&#xff0c;实际上我们都可以将这些内容记录下来。包括个人观点&#xff0c;旅行游记&#xff0c;心情…...

CSRF(跨站请求伪造)漏洞概述

CSRF(跨站请求伪造)漏洞概述 一、​什么是 CSRF ​ 攻击者诱导已登录用户在不知情的情况下&#xff0c;对受信任网站执行未授权操作。 简单说&#xff1a;你登录着网站A&#xff0c;攻击者诱导你访问某个恶意链接&#xff0c;使网站A误以为是你自己发出的操作&#xff08;比…...

[Java实战经验]对象拷贝

目录 谨慎重写clone方法重写clone()支持深拷贝带来的问题 合适的深拷贝 首先&#xff0c;对于不可变的类&#xff0c;我们不应该实现Cloneable接口&#xff0c;因为不可变类不需要拷贝&#xff0c;直接引用即可&#xff0c;实现Cloneable接口只会造成浪费。 对于Java可变类来说…...

WAF防火墙:构筑Web应用安全的“隐形护盾”

在数字化时代&#xff0c;Web应用已成为企业服务与用户交互的核心窗口。然而&#xff0c;随之而来的SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、DDoS攻击等威胁&#xff0c;时刻考验着网站的安全防线。Web应用防火墙&#xff08;WAF&#xff09;作为关键防护工具&…...