湖南住建云网站/网络营销专业大学排名
tomcat多实例部署jenkins
文章目录
- tomcat多实例部署jenkins
- 1.简介:
- 2.优缺点:
- 3.工作原理:
- 4.工作流程:
- 5.tomcat多实例部署jenkins流程
- 5.1.环境说明
- 5.2.部署前准备工作
- 5.3.多实例部署tomcat
- 5.4.部署jenkins
- 5.5.创建一个jenkins项目
- 5.6.配置jenkins自动拉取项目,进行打包(maven),并将包传输到tomcat的项目目录(webapps)中
1.简介:
Jenkins是一个可扩展的、基于Web的工具,用于自动化构建、测试和部署软件项目。它支持各种版本控制系统、构建工具和测试框架,并提供了丰富的插件生态系统来满足不同的需求。
2.优缺点:
优点:
- 灵活性:Jenkins可以与多种工具和平台集成,支持各种编程语言和技术栈,因此非常灵活适应不同的项目需求。
- 易用性:Jenkins具有用户友好的Web界面和可视化配置,使得配置和管理任务变得简单易上手。
- 扩展性:Jenkins拥有丰富的插件生态系统,可以通过插件来扩展其功能,满足特定项目需要。
- 社区支持:Jenkins拥有庞大的活跃社区,它提供了大量的文档、教程和支持,可以帮助解决常见问题和获取最新的功能和改进。
缺点:
- 配置复杂:有时,Jenkins的配置可能因其灵活性而变得复杂,特别是在处理复杂的构建和部署流程时。
- 学习曲线:对于新手来说,学习和理解Jenkins的概念和使用方式可能需要一些时间和努力。
3.工作原理:
Jenkins的工作原理基于事件驱动和插件系统。它通过不断监测源代码管理系统中的代码变更或预定的时间触发事件,然后根据预定义的构建配置和操作来执行构建、测试和部署任务。
- 事件驱动机制:
- 源代码变更事件:Jenkins可以监测源代码管理系统(如Git、SVN)中的代码变更事件。它通过轮询或钩子机制,检查源代码是否发生了变更。
- 时间触发器:Jenkins还可以按计划(定时触发器)执行构建任务。开发人员可以设置特定的时间或时间表,使Jenkins在指定时间触发构建。
- 项目配置:
- 用户通过Jenkins的Web界面创建或导入项目。在项目配置中,用户可以设置各种参数,如源代码管理、构建触发器、构建参数、构建步骤等。这些配置决定了Jenkins如何执行构建任务。
- 构建过程:
- Jenkins使用定义在项目配置中的构建过程来执行构建任务。构建过程包括一系列步骤,如代码拉取、构建、测试、部署等。每个步骤可以由用户指定或使用插件提供的工具和命令来执行。
- 执行构建任务:
- 当满足设定的构建触发条件(如源代码变更或时间触发)时,Jenkins将自动开始执行构建任务。它会根据项目配置中定义的构建过程逐步执行每个步骤。
- 结果和报告:
- 在构建过程中,Jenkins跟踪记录构建任务的执行状态和结果。它会生成构建日志、报告和统计信息,以供用户查看和分析构建结果。
- 插件系统:
- Jenkins拥有丰富的插件生态系统,用户可以根据项目需要选择并安装插件。这些插件提供了额外的功能和扩展,例如集成测试框架、静态代码分析工具、部署工具等。插件可以通过Jenkins的Web界面进行管理和配置。
4.工作流程:
- 配置Jenkins服务器:安装Jenkins并进行初始化配置,设置插件、环境变量、权限等。
- 创建或导入项目:在Jenkins中创建新项目或导入现有项目,并设置相关配置,如源代码管理、构建触发器等。
- 配置构建过程:定义构建过程,包括编译代码、运行测试、生成文档等。这可以通过脚本命令、构建步骤、构建脚本等方式来实现。
- 触发构建:Jenkins可以通过轮询源代码管理系统或根据时间计划来监测项目的变化,一旦有触发条件满足,就会触发构建过程。
- 构建执行:Jenkins根据配置的构建流程执行构建任务,包括代码拉取、构建、测试等操作。
- 构建结果和报告:Jenkins会记录构建的结果和日志,生成构建报告和统计信息,供团队查看和分析。
- 部署或集成:根据需要,Jenkins可以自动将构建的产物部署到目标环境,或与其他工具和平台集成,如持续部署工具、通知系统等。
5.tomcat多实例部署jenkins流程
5.1.环境说明
jenkins需部署在tomcat服务上
操作系统 | tomcat版本 | jenkins版本 |
---|---|---|
centos 8 | tomcat-9.0.80 | jenkins-2.414.2 |
5.2.部署前准备工作
//关闭防火墙和selinux
[root@tomcat ~]# systemctl disable --now firewalld
[root@tomcat ~]# setenforce 0
[root@tomcat ~]# vim /etc/selinux/config
[root@tomcat ~]# reboot //重启主机生效
[root@tomcat ~]# getenforce
Disabled //确保selinux状态为disabled//配置yum源,建议使用阿里云的centos8源
[root@tomcat ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 2495 100 2495 0 0 2338 0 0:00:01 0:00:01 --:--:-- 2338
[root@tomcat ~]# yum clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
17 files removed
[root@tomcat ~]# yum makecache
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
CentOS-8.5.2111 - Base - mirrors.aliyun.com 410 kB/s | 4.6 MB 00:11
CentOS-8.5.2111 - Extras - mirrors.aliyun.com 19 kB/s | 10 kB 00:00
CentOS-8.5.2111 - AppStream - mirrors.aliyun.com 757 kB/s | 8.4 MB 00:11
Metadata cache created.
5.3.多实例部署tomcat
//安装java环境
[root@tomcat ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel wget vim
[root@tomcat ~]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)//拉取tomcat软件包
[root@tomcat ~]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
--2023-10-10 13:41:29-- https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
Resolving archive.apache.org (archive.apache.org)... 65.108.204.189, 2a01:4f9:1a:a084::2
Connecting to archive.apache.org (archive.apache.org)|65.108.204.189|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11692853 (11M) [application/x-gzip]
Saving to: ‘apache-tomcat-9.0.80.tar.gz’apache-tomcat-9.0.80.tar.gz 100%[===============================================>] 11.15M 25.2KB/s in 5m 55s 2023-10-10 13:47:25 (32.1 KB/s) - ‘apache-tomcat-9.0.80.tar.gz’ saved [11692853/11692853][root@tomcat ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.80.tar.gz//解压tomcat软件包
[root@tomcat ~]# tar xf apache-tomcat-9.0.80.tar.gz
[root@tomcat ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.80 apache-tomcat-9.0.80.tar.gz jenkins.war//将解压后的目录复制两份放到/usr/local/目录下,一个用于运行jenkins,另一个用来运行tomcat中的项目
[root@tomcat ~]# cp -r apache-tomcat-9.0.80 /usr/local/jenkins
[root@tomcat ~]# cp -r apache-tomcat-9.0.80 /usr/local/tomcat
[root@tomcat ~]# ls /usr/local/ && cd /usr/local/
bin etc games include jenkins lib lib64 libexec sbin share src tomcat//更改tomcat中的端口号,与jenkins以示区分
[root@tomcat ~]# cd /usr/local/tomcat/conf/
[root@tomcat conf]# ls
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
[root@tomcat conf]# vim server.xml
[root@tomcat conf]# grep -A1 '<Server port' server.xml
<Server port="8006" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" />
[root@tomcat conf]# grep -A3 '<Connector port' server.xml<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8444"maxParameterCount="1000"
//开启服务,查看端口
[root@tomcat conf]# ../bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@tomcat conf]# cd
[root@tomcat ~]# cd /usr/local/jenkins/
[root@tomcat jenkins]# bin/catalina.sh start
Using CATALINA_BASE: /usr/local/jenkins
Using CATALINA_HOME: /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@tomcat jenkins]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 1 [::ffff:127.0.0.1]:8006 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 100 *:8081 *:*
5.4.部署jenkins
Jenkins官网https://www.jenkins.io/download/
///安装Jenkins所需要的Java-17-openjdk
[root@tomcat local]# cd jenkins/
[root@tomcat jenkins]# yum -y install java-17-openjdk java-17-openjdk-devel//由于安装tomcat时安装的Java1.8,但是Jenkins需要Java17,为了防止版本冲突,需要配置jdk的优先级,从而能够同时使用这两个版本
[root@tomcat jenkins]# alternatives --config java //优先使用java-17-openjdkThere are 2 programs which provide 'java'.Selection Command
-----------------------------------------------1 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)
*+ 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)Enter to keep the current selection[+], or type selection number: 1
[root@tomcat ~]# bash //bash使其生效 //下载jenkins.war的包
[root@tomcat ~]# wget wget https://get.jenkins.io/war-stable/2.414.2/jenkins.war
[root@tomcat ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.80 apache-tomcat-9.0.80.tar.gz jenkins.war////将Jenkins包复制到我们为其准备的其中一个tomcat的/usr/local/jenkins/webapps/目录中去,也就是我们前面复制的jenkins中去
[root@tomcat ~]# cp jenkins.war /usr/local/jenkins/webapps/
[root@tomcat ~]# cd /usr/local/jenkins/webapps/
[root@tomcat webapps]# ls
docs examples host-manager jenkins.war manager ROOT//重启服务后,则会自动解压jenkins.war
[root@tomcat webapps]# ../bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/jenkins
Using CATALINA_HOME: /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@tomcat webapps]# ../bin/catalina.sh start
Using CATALINA_BASE: /usr/local/jenkins
Using CATALINA_HOME: /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@tomcat webapps]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 1 [::ffff:127.0.0.1]:8006 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 100 *:8081 *:*
[root@tomcat webapps]# ls //jenkins自动解压
docs examples host-manager jenkins jenkins.war manager ROOT
访问jenkins页面
[root@tomcat webapps]# cat /root/.jenkins/secrets/initialAdminPassword
3a5952875fdc4a4c91fc87d480f32338
安装推荐插件
创建一个用户
部署完成
5.5.创建一个jenkins项目
测试
5.6.配置jenkins自动拉取项目,进行打包(maven),并将包传输到tomcat的项目目录(webapps)中
安装所需的软件包
[root@tomcat ~]# yum -y install git maven
[root@tomcat ~]# which git
/usr/bin/git
[root@tomcat ~]# which mvn
/usr/bin/mvn
修改test项目的流水线脚本内容
脚本内容:
//在gitee网站上拉取一个项目目录,然后领用mvn命令压缩至我们想要的.war格式,再将压缩包放置到tomcat的项目目录中,重启tomcat服务后自动解压,从而能够通过tomcat服务端口号访问到我们拉取的项目网页
pipeline {agent anystages {stage('pull code and package') {steps {git 'https://gitee.com/forgotten/tomcat-java-demo.git'sh 'mvn clean package'}}stage('publish') {steps { sh 'cp /root/tomcat-java-demo/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ftx.war'sh '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'}}}
}
通过jenkins压缩的包存放位置
[root@tomcat target]# ls
classes ly-simple-tomcat-0.0.1-SNAPSHOT maven-archiver
generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status
[root@tomcat target]# pwd
/root/.jenkins/workspace/test/target
进入tomcat项目进行查看
[root@tomcat webapps]# pwd
/usr/local/tomcat/webapps
[root@tomcat webapps]# ls
docs examples ftx ftx.war host-manager manager ROOT
通过8081端口访问我们拉取的项目
generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status
[root@tomcat target]# pwd
/root/.jenkins/workspace/test/target
**进入tomcat项目进行查看**~~~powershell
[root@tomcat webapps]# pwd
/usr/local/tomcat/webapps
[root@tomcat webapps]# ls
docs examples ftx ftx.war host-manager manager ROOT
通过8081端口访问我们拉取的项目
访问成功
相关文章:

tomcat多实例部署jenkins
tomcat多实例部署jenkins 文章目录 tomcat多实例部署jenkins1.简介:2.优缺点:3.工作原理:4.工作流程:5.tomcat多实例部署jenkins流程5.1.环境说明5.2.部署前准备工作5.3.多实例部署tomcat5.4.部署jenkins5.5.创建一个jenkins项目5…...

强连通分量+缩点
[图论与代数结构 701] 强连通分量 题目描述 给定一张 n n n 个点 m m m 条边的有向图,求出其所有的强连通分量。 注意,本题可能存在重边和自环。 输入格式 第一行两个正整数 n n n , m m m ,表示图的点数和边数。 接下来…...

如何做系统架构设计
文章目录 1、如何进行架构设计体系架构需求体系架构设计体系架构文档化体系架构复审体系架构实现体系架构演化 2、架构设计注意事项分治原则服务自治拥抱变化可维护性考虑依赖和限制阅读代码注意事项 3、最后 系统架构应该如何设计,从自己做架构的经历来分享一些体…...

L14D6内核模块编译方法
一、内核模块基础代码解析 一个内核模块代码错误仍然会导致的内核崩溃。 GPL协议:开源规定,使用内核一些函数需要 1、单内核的缺点 单内核扩展性差的缺点减小内核镜像文件体积,一定程度上节省内存资源提高开发效率不能彻底解决稳定性低的缺…...

PyTorch入门教学——dir()函数和help()函数的应用
1、简介 已知PyTorch是一个工具包,其中包含许多功能函数。dir()函数和help()函数是学习PyTorch包的重要法宝。 dir():能让我们知道工具包以及工具包中的分隔区有什么东西。help():能让我们知道每个工具是如何使用的,即工具的使用…...

使用Elasticsearch来进行简单的DDL搜索数据
说明:Elasticsearch提供了多种多样的搜索方式来满足不同使用场景的需求,我们可以使用Elasticsearch来进行各种复制的查询,进行数据的检索。 1.1 精准查询 用来查询索引中某个类型为keyword的文本字段,类似于SQL的“”查询。 创…...

【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡
《树与二叉树》 二叉树的顺序存储结构 顺序存储只适用于完全二叉树和满二叉树,一般二叉树不适用i 2 的左孩子为 2i 4,右孩子为 2i 1 5 二叉树的链式存储结构 链式存储适用于二叉树;空结点用“∧”表示二叉链表:左孩子࿰…...

关于矿井地面电力综合自动化系统的研究与产品选型
安科瑞 崔丽洁 摘要:煤矿供电系统是煤矿生产的重要动力保障 , 一旦电力中断 , 生产将被迫停止 , 同时停电后容易发生瓦斯积聚爆炸、淹井等恶性事故,现有配电室采用不同厂商的保护装 置产品,没有形成有效的监控配电系统,不便于管…...

论文阅读:Offboard 3D Object Detection from Point Cloud Sequences
目录 概要 Motivation 整体架构流程 技术细节 3D Auto Labeling Pipeline The static object auto labeling model The dynamic object auto labeling model 小结 论文地址:[2103.05073] Offboard 3D Object Detection from Point Cloud Sequences (arxiv.o…...

Python学习基础笔记六十八——循环
循环是编程语言常见的流程控制。 Python语句要让计算机反复地做一些事情,就要用到循环语句。 有While和for循环。 while循环: command input("请输入命令:") while command ! exit:print(f输入的命令是{command})command input("请输…...

部署k8s dashboard(这里使用Kubepi)
9. 部署k8s dashboard(这里使用Kubepi) Kubepi是一个简单高效的k8s集群图形化管理工具,方便日常管理K8S集群,高效快速的查询日志定位问题的工具 部署KubePI(随便在哪个节点部署,我这里在主节点部署&#…...

Java Lambda表达式的使用
我们了解了 java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。…...

【初始C语言8】详细讲解初阶结构体的知识
前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏…...

<C++> IO流
C语言的输入与输出 在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf: scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。printf: 将指定的数据输出到…...

基于单目相机的2D测量(工件尺寸和物体尺寸)
目录 1.简介 2.基于单目相机的2D测量 2.1 想法: 2.2 代码思路 2.2 主函数部分 1.简介 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造:在工业制造过程中,精确测量是确保产品质量和一致性的关键。基于单目相机的2…...

23面向对象案例1
目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn? 3、用面向对象的方法可以解决冗余的问题,但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题,可以将类属性改成私有变量吗&…...

go语言基础之常量与itoa
视频学习地址:Go零基础入门_在线视频教程-CSDN程序员研修院 一. 常量 定义:常量是一个简单值的标识符,在程序运行时,不会被修改的量。注意:常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数…...

民宿酒店订房房态商城小程序的作用是什么
外出旅游出差,酒店民宿总是很好的选择,随着经济复苏,各地旅游及外出办公人次增多,酒店成绩随之增加,市场呈现多品牌酒店经营形式。 区别于以前,如今互联网深入各个行业,酒店经营也面临着困境。…...

acwing算法基础之数据结构--栈和队列
目录 1 知识点2 模板 1 知识点 栈:先进后出。先进的就是栈底,后进的就是栈顶。后进先出嘛,所以在栈顶弹出元素。 队列:先进先出。先进的就是队头,后进的就是队尾。先进先出嘛,所以在队头弹出元素。 单调…...

关于导出的Excel文件的本质
上篇文章中提到关于xlsx改造冻结窗格的代码,我是怎么知道要加pane的呢,加下来就把我的心路历程记录一下。 我改造之前也是没有头绪的,我网上查了很多,只告诉我如何使用,但源码里没有针对!freeze的处理,所以…...

Rust中FnOnce如何传递给一个约束Fn的回调
Rust中FnOnce如何传递给一个约束Fn的回调 下面的代码,set_cb(func);会报错,如何包装能够做到这样的效果: fn set_cb<F: Fn() static>(handler: F) {handler(); }fn main() {let join_handle std::thread::spawn(|| {});let func |…...

【JUC】线程通信与等待唤醒机制
文章目录 1. 线程通信2. Object类中的wait和notify方法实现等待和唤醒3. Condition接口中的await和signal方法实现等待和唤醒4. LockSupport实现等待和唤醒4.1 优点 1. 线程通信 多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相…...

C#面对对象(英雄联盟人物管理系统)
目录 英雄信息类 因为要在两个窗体里面调用字典,所以要写两个类来构建全局变量 添加功能 查询功能 英雄信息类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp…...

2023年中国分布式光纤传感产量、需求量及行业市场规模分析[图]
分布式光纤传感器中的光纤能够集传感、传输功能于一体,能够完成在整条光纤长度上环境参量的空间、时间多维连续测量,具有结构简单、易于布设、性价比高、易实现长距离等独特优点,常用的分布式光纤传感器有光时域反射仪、布里渊分析仪、喇曼反…...

B2R Raven: 2靶机渗透
B2R Raven: 2靶机渗透 视频参考:ajest :https://www.zhihu.com/zvideo/1547357583714775040?utm_id0 原文参考:ajest :https://zhuanlan.zhihu.com/p/270343652 文章目录 B2R Raven: 2靶机渗透1 启动靶机,查看后网卡…...

SpringBoot-黑马程序员-学习笔记(六)
目录 76.常用计量单位使用 77.bean属性校验 81.测试表现层 82.发送虚拟请求 94.springboot读写redis的客户端 100.ElasticSearch(简称ES) 一个分布式全文搜索引擎 76.常用计量单位使用 Data Component ConfigurationProperties(prefix "serve…...

unity2022版本 实现手机虚拟操作杆
简介 在许多移动游戏中,虚拟操纵杆是一个重要的用户界面元素,用于控制角色或物体的移动。本文将介绍如何在Unity中实现虚拟操纵杆,提供了一段用于移动控制的代码。我们将讨论不同类型的虚拟操纵杆,如固定和跟随,以及如…...

『GitHub Actions』部署静态博客指南
前言 之前博主是使用的 Jenkins 实现 vuepress 博客的自动部署与持续交付,但是因为现在迁移服务器到海外,并且服务器配置降低。现在经常出现服务器的 Jenkins 构建过程中 CPU 占用率过高,导致服务器卡死 然后我想的话既然只是部署静态博客&…...

WPF Datagrid Header数据绑定,表头复选框实现全选、全否、部分选中,根据条目动态变化
制作一个根表头为CheckBox可全选、全不选的列表,且可根据条目自动调整CheckBox的状态(选中、不选、部分选中)。 本来是想用DataGrid做一个CheckBox的列用于勾选其中的某些行,当时做出来之后想着添加一个全选、全否的功能。做两个…...

Tensorflow2 中对模型进行编译,不同loss函数的选择下输入数据格式需求变化
一、tf2中常用的损失函数介绍 在 TensorFlow 2 中,编译模型时可以选择不同的损失函数来定义模型的目标函数。不同的损失函数适用于不同的问题类型和模型架构。下面是几种常见的损失函数以及它们的作用和适用场景: 1.均方误差(Mean Squared …...