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

使用中间件自动化部署java应用

为了实现你在 IntelliJ IDEA 中打包项目并通过工具推送到两个 Docker 服务器(172.168.0.1 和 172.168.0.12),并在推送后自动或手动重启容器,我们可以按照以下步骤进行操作:

  1. 在 IntelliJ IDEA 中配置 Maven 或 Gradle 打包

    • 如果你使用的是 Maven,确保 pom.xml 文件中有正确的构建配置。
    • 如果你使用的是 Gradle,确保 build.gradle 文件中有正确的构建配置。
  2. 构建 Docker 镜像

    • 创建一个 Dockerfile 文件来定义如何构建你的应用程序镜像。
  3. 配置 Docker 客户端

    • 在本地机器上安装 Docker 并配置好与远程 Docker 服务器的连接。
  4. 编写脚本来自动化整个流程

    • 使用 Bash 脚本或其他脚本语言来自动化构建、推送和重启容器的过程。
  5. 设置中间件

    • 可以使用 Jenkins、GitLab CI/CD、Ansible 等工具来管理自动化流程。

下面是一个详细的示例,假设你使用的是 Maven 和 Docker,并且使用 Jenkins 来管理自动化流程。

1. 配置 Maven 打包

确保 pom.xml 文件中包含以下内容:

xml

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-application</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2. 创建 Dockerfile

创建一个 Dockerfile 文件:

# 使用官方的 Java 基础镜像
FROM openjdk:11-jre-slim# 设置工作目录
WORKDIR /app# 复制构建好的 jar 文件到镜像中
COPY target/my-application-1.0-SNAPSHOT.jar my-application.jar# 暴露应用程序的端口
EXPOSE 8080# 运行应用程序
ENTRYPOINT ["java", "-jar", "my-application.jar"]
 
ENTRYPOINT ["java", "-jar", "my-application.jar"]

3. 配置 Docker 客户端

确保你的本地机器上有 Docker 安装并且可以连接到远程 Docker 服务器。你可以通过 SSH 连接到远程 Docker 服务器并配置 Docker 守护进程监听 TCP 端口。

编辑 /etc/docker/daemon.json 文件:

bash

{"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

然后重启 Docker 服务:

bash

sudo systemctl restart docker

4. 编写 Jenkins Pipeline

在 Jenkins 中创建一个新的 Pipeline 项目,并添加以下 Groovy 脚本:

groovy

pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean package'}}stage('Build Docker Image') {steps {script {def app = docker.build("my-application:${env.BUILD_ID}")app.push("172.168.0.1:5000/my-application:${env.BUILD_ID}")app.push("172.168.0.12:5000/my-application:${env.BUILD_ID}")}}}stage('Deploy to 172.168.0.1') {steps {script {// 登录到第一个 Docker 服务器sh 'ssh user@172.168.0.1 "docker pull 172.168.0.1:5000/my-application:${BUILD_ID} && docker stop my-application || true && docker rm my-application || true && docker run -d --name my-application -p 8080:8080 172.168.0.1:5000/my-application:${BUILD_ID}"'}}}stage('Deploy to 172.168.0.12') {steps {script {// 登录到第二个 Docker 服务器sh 'ssh user@172.168.0.12 "docker pull 172.168.0.12:5000/my-application:${BUILD_ID} && docker stop my-application || true && docker rm my-application || true && docker run -d --name my-application -p 8080:8080 172.168.0.12:5000/my-application:${BUILD_ID}"'}}}}
}

5. 设置中间件

在这个例子中,我们使用 Jenkins 来管理整个流程。Jenkins 可以自动触发构建过程,并在构建完成后自动执行部署和重启操作。

5.1 安装 Jenkins 插件

确保在 Jenkins 中安装了以下插件:

  • Git Plugin
  • Docker Pipeline Plugin
5.2 配置 Jenkins 凭证

在 Jenkins 中配置 SSH 凭证,以便 Jenkins 可以通过 SSH 访问远程 Docker 服务器。

6. 测试流程

  1. 提交代码到版本控制系统(如 Git)。
  2. 触发 Jenkins 构建(可以通过定时任务、手动触发或 Webhook 触发)。
  3. Jenkins 将会自动执行构建、打包、推送 Docker 镜像以及部署和重启容器的操作。

这样,你就完成了从 IntelliJ IDEA 到 Jenkins 自动化构建、打包、推送和部署 Docker 镜像的全过程。

另外一个案例介绍

使用中间件来管理和自动化 Docker 容器的部署和管理是一个很好的实践,可以帮助提高效率和一致性。我们将使用 Jenkins 作为中间件来管理 Docker 容器,并配置一个具体的案例。

案例概述

假设我们有一个简单的 Spring Boot 应用程序,我们需要将其打包成 Docker 镜像,并推送到两个 Docker 服务器(172.168.0.1172.168.0.12)。然后在每个服务器上自动或手动重启容器。

步骤

  1. 准备项目代码
  2. 创建 Dockerfile
  3. 安装并配置 Jenkins
  4. 配置 Jenkins Pipeline
  5. 设置 Docker Hub 或私有仓库
  6. 测试整个流程

1. 准备项目代码

假设你已经有一个 Spring Boot 项目,以下是项目的目录结构:

my-spring-boot-app/
├── src/
│   └── ...
├── pom.xml
└── Dockerfile

2. 创建 Dockerfile

在项目根目录下创建一个 Dockerfile 文件:

# 使用官方的 Java 基础镜像
FROM openjdk:11-jre-slim# 设置工作目录
WORKDIR /app# 复制构建好的 jar 文件到镜像中
COPY target/my-spring-boot-app-1.0-SNAPSHOT.jar my-spring-boot-app.jar# 暴露应用程序的端口
EXPOSE 8080# 运行应用程序
ENTRYPOINT ["java", "-jar", "my-spring-boot-app.jar"]

3. 安装并配置 Jenkins

3.1 安装 Jenkins

你可以通过多种方式安装 Jenkins,这里以 Ubuntu 为例:

bash

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins

访问 http://your_jenkins_server_ip_or_domain:8080 并完成初始设置。

3.2 安装必要的插件

在 Jenkins 管理界面中,导航到“Manage Jenkins” -> “Manage Plugins”,安装以下插件:

  • Git Plugin
  • Docker Pipeline Plugin
  • SSH Agent Plugin
3.3 配置 SSH 凭证
  1. 导航到“Manage Jenkins” -> “Manage Credentials”。
  2. 添加全局凭证:
    • 类型:SSH Username with private key
    • ID:jenkins-docker-server
    • Description:Credentials for accessing Docker servers
    • Username:user_on_docker_servers
    • Private Key:粘贴你的私钥内容

4. 配置 Jenkins Pipeline

4.1 创建一个新的 Pipeline 项目
  1. 在 Jenkins 主页点击“New Item”。
  2. 输入项目名称,选择“Pipeline”,然后点击“OK”。
4.2 编写 Jenkins Pipeline 脚本

在 Pipeline 项目的配置页面中,找到“Pipeline”部分,将以下 Groovy 脚本粘贴进去:

groovy

pipeline {agent anyenvironment {DOCKER_IMAGE_NAME = 'my-spring-boot-app'VERSION = "${env.BUILD_ID}"DOCKER_SERVER_1 = '172.168.0.1'DOCKER_SERVER_2 = '172.168.0.12'SSH_CREDENTIALS_ID = 'jenkins-docker-server'}stages {stage('Checkout') {steps {git url: 'https://github.com/yourusername/my-spring-boot-app.git', branch: 'main'}}stage('Build') {steps {sh 'mvn clean package'}}stage('Build Docker Image') {steps {script {docker.build("${DOCKER_IMAGE_NAME}:${VERSION}")}}}stage('Push Docker Image to Server 1') {steps {sshagent([env.SSH_CREDENTIALS_ID]) {sh """docker save -o ${DOCKER_IMAGE_NAME}-${VERSION}.tar ${DOCKER_IMAGE_NAME}:${VERSION}scp ${DOCKER_IMAGE_NAME}-${VERSION}.tar user@${DOCKER_SERVER_1}:/home/user/${DOCKER_IMAGE_NAME}-${VERSION}.tarssh user@${DOCKER_SERVER_1} "docker load -i /home/user/${DOCKER_IMAGE_NAME}-${VERSION}.tar &&docker stop ${DOCKER_IMAGE_NAME} || true &&docker rm ${DOCKER_IMAGE_NAME} || true &&docker run -d --name ${DOCKER_IMAGE_NAME} -p 8080:8080 ${DOCKER_IMAGE_NAME}:${VERSION}""""}}}stage('Push Docker Image to Server 2') {steps {sshagent([env.SSH_CREDENTIALS_ID]) {sh """docker save -o ${DOCKER_IMAGE_NAME}-${VERSION}.tar ${DOCKER_IMAGE_NAME}:${VERSION}scp ${DOCKER_IMAGE_NAME}-${VERSION}.tar user@${DOCKER_SERVER_2}:/home/user/${DOCKER_IMAGE_NAME}-${VERSION}.tarssh user@${DOCKER_SERVER_2} "docker load -i /home/user/${DOCKER_IMAGE_NAME}-${VERSION}.tar &&docker stop ${DOCKER_IMAGE_NAME} || true &&docker rm ${DOCKER_IMAGE_NAME} || true &&docker run -d --name ${DOCKER_IMAGE_NAME} -p 8080:8080 ${DOCKER_IMAGE_NAME}:${VERSION}""""}}}}post {always {cleanWs()}}
}

5. 设置 Docker Hub 或私有仓库

在这个案例中,我们直接在 Jenkins 上构建和推送 Docker 镜像到远程服务器。如果你希望使用 Docker Hub 或私有仓库,可以进行相应的调整。

5.1 使用 Docker Hub
  1. 登录 Docker Hub 并创建一个仓库。
  2. 修改 Jenkins Pipeline 脚本中的推送步骤:

groovy

stage('Push Docker Image to Docker Hub') {steps {script {docker.withRegistry('https://index.docker.io/v1/', 'docker-hub-credentials-id') {def app = docker.build("${env.DOCKER_IMAGE_NAME}:${env.VERSION}")app.push()}}}
}

确保在 Jenkins 中配置了 Docker Hub 的凭据。

6. 测试整个流程

  1. 提交代码到版本控制系统(如 Git)。
  2. 手动触发 Jenkins 构建(可以在 Jenkins 项目主页点击“Build Now”)。
  3. Jenkins 将会自动执行以下操作:
    • 从 Git 仓库拉取最新代码。
    • 构建 Maven 项目并生成 JAR 文件。
    • 构建 Docker 镜像。
    • 推送 Docker 镜像到两个 Docker 服务器。
    • 在每个服务器上停止并删除旧的容器,然后启动新的容器。

总结

通过上述步骤,我们成功地使用 Jenkins 作为中间件来管理和自动化 Docker 容器的部署和管理。Jenkins 自动化了从代码提交到应用部署的整个过程,提高了效率和一致性。

如果你有任何问题或需要进一步细化某个部分,请告诉我!

相关文章:

使用中间件自动化部署java应用

为了实现你在 IntelliJ IDEA 中打包项目并通过工具推送到两个 Docker 服务器&#xff08;172.168.0.1 和 172.168.0.12&#xff09;&#xff0c;并在推送后自动或手动重启容器&#xff0c;我们可以按照以下步骤进行操作&#xff1a; 在 IntelliJ IDEA 中配置 Maven 或 Gradle 打…...

Vue.js开发入门:从零开始搭建你的第一个项目

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊 Vue.js&#xff0c;一个超火的前端框架。如果你是编程小白&#xff0c;别怕&#xff0c;跟着我一步步来&#xff0c;保证你能轻松上手&#xff0c;搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…...

mySQL安装(LINUX)

一、1. 下载并安装MySQL官方的 Yum Repository 1、连接云服务器&#xff0c;进入opt 2、下载安装包 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 3、解压 rpm -ivh mysql-community-release-el7-5.noarch.rpm 4、安装 yum install mysql-commu…...

【机器学习】农业 4.0 背后的智慧引擎:机器学习助力精准农事决策

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在当今数字化浪潮汹涌澎湃之际&#xff0c;农业领域正经历着一场前所未有的深刻变革&#xff0c;大踏步迈向农业 4.0时代。这一时代…...

在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器

今天来和大家分享一下如何在 Azure 100 学生订阅中创建一台 Ubuntu VPS&#xff0c;并在其上通过 Docker 部署 Nginx 服务器。在这个过程中&#xff0c;我们将一步步走过每一个细节&#xff0c;希望能帮助到大家。 Docker 和 Nginx 简介 Docker 是一个开源的容器化平台&#…...

快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力

作者&#xff1a;Karthik Gopal&#xff0c;SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 无论是在出货量巨大的消费电子市场&#xff0c;还是针对特定应用的细分芯片市场&#xff0c;差异化芯片设计带来的定制化需求也在芯片…...

Linux常用命令大全

mv详解目录 Linux 常用命令大全 1. ls 指令 2. touch 指令 3. pwd 指令 4. mkdir 指令 5. cd 指令 6. rmdir 和 rm 指令 7. man 指令 8. cp 指令 9. mv 指令 10. cat 指令 11. more 指令 12. less 指令 13. head 指令 14. tail 指令 15. find 指令 16. grep 指…...

K-均值聚类算法

K-均值聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集划分为K个不同的簇。它的基本思想是通过迭代将样本点划分到最相邻的簇中&#xff0c;以最小化各个簇内的平均距离。下面我们来详细讲解K-均值聚类算法的步骤及其优缺点。 步骤&#xff1a; 1. 随机选择K个质…...

Windows 环境下安装和启动 Redis 服务

在 Windows 环境下安装和启动 Redis 服务可以通过多种方式实现&#xff0c;下面将详细介绍几种常见的方法。我们将重点介绍通过 Chocolatey 包管理器、Docker 容器以及 MSOpenTech 提供的官方移植版来安装 Redis。 方法一&#xff1a;使用 Chocolatey 安装 Redis Chocolatey …...

关于在windows系统中编译ffmpeg并导入到自己项目中这件事

关于在windows系统中编译ffmpeg并导入到自己项目中这件事 前因&#xff08;可跳过不看&#xff09; 前阵子由于秋招需求&#xff0c;写了一个简易的安卓播放器&#xff0c;最终因为时间问题还有一些功能没有实现着实可惜&#xff0c;如&#xff1a;倍速播放&#xff0c;快进操…...

实战开发:基于用户反馈筛选与分析系统的实现

引言 在当今的数字化社会中&#xff0c;用户反馈是企业决策的重要依据。无论是电商平台、社交网络&#xff0c;还是产品服务&#xff0c;收集用户反馈并加以分析&#xff0c;有助于提升用户体验&#xff0c;改善服务质量。然而&#xff0c;面对海量的用户反馈&#xff0c;如何有…...

Android SystemUI——服务启动流程(二)

在 Andorid 系统源码中&#xff0c;package/apps下放的是系统内置的一些 APP&#xff0c;例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下&#xff0c;它们也是系统的 APP&#xff0c;SystemUI 就在此目录下。它控制着整个 Android 系统的界面&am…...

拷贝构造函数

文章目录 一、4. 拷贝构造函数 今天我们来学习拷贝构造函数。 一、4. 拷贝构造函数 如果⼀个构造函数的第⼀个参数是自身类型的引用&#xff0c;且任何额外的参数都有默认值&#xff0c;则此叫做拷贝构造函数&#xff0c;也就是说拷贝构造是⼀个特殊的构造函数。 它的形式是这…...

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展&#xff0c;虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络&#xff0c;Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展&#xff0c;OVN 提供了对虚拟网络抽象的支持&#xff0c;使得大规模部署和管理…...

面试加分项:Android Framework PMS 全面概述和知识要点

在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:PMS 基础知识 1.1 PMS 定义与工作原理 1.2 PMS 的主要任务 1.3 PMS 与相关组件的交互 第二章:PMS 的核心功能 2.1 应用安装与卸载机制 2.2 应用更新与版本管理 2.3 组件管理 第…...

征服Windows版nginx(2)

1.配置Nginx 编辑Nginx的配置文件&#xff08;通常是nginx.conf&#xff09;&#xff0c;找到安装Nginx位置&#xff0c;如下路径&#xff1a; D:\nginx-1.26.2\conf 双击打开nginx.CONF编辑&#xff0c;在http块中添加一个新的server块&#xff0c;用于指定Vue项目的静态文件…...

QML states和transitions的使用

一、介绍 1、states Qml states是指在Qml中定义的一组状态&#xff08;States&#xff09;&#xff0c;用于管理UI元素的状态转换和属性变化。每个状态都包含一组属性值的集合&#xff0c;并且可以在不同的状态间进行切换。 通过定义不同的状态&#xff0c;可以在不同的应用场…...

flask_sqlalchemy relationship 子表排序

背景&#xff1a; 使用flask_sqlalchemy 的orm 时总不可避免的遇到子表排序问题 材料&#xff1a; 省略 制作&#xff1a; 直接看下面2段代码片段&#xff08;一对多关系组合&#xff09;&#xff0c;自行理解&#xff1a; 1、多的一方实体 from .exts import db from f…...

python+pymysql

python操作mysql 一、python操作数据库 1、下载pymysql 库&#xff0c; 方法一&#xff1a;pip3 install pymysql 或pip install pymysql 方法二&#xff1a;在pycharm中setting下载pymysql 2、打开虚拟机上的数据库 3、pymysql连接 dbpymysql.Connection(host&qu…...

HAL库 中断相关函数

目录 中断相关函数 函数&#xff1a;HAL_SuspendTick()和HAL_ResumeTick() 涉及手册&#xff1a; 涉及寄存器&#xff1a; 涉及位&#xff1a; 函数&#xff1a;HAL_UART_IRQHandler(&huart3) 存在位置&#xff1a; 拓展&#xff1a; 函数&#xff1a;HAL_UARTEx…...

薪资协商注意事项

根据从AI&#xff08;豆包kimi&#xff09;中查询的内容&#xff0c;以及实际面试中的经验&#xff0c;进行整理&#xff0c;供大家参考&#xff1a; 薪资构成&#xff1a;了解薪水的固定工资、绩效、补贴、奖金及其他福利等具体构成。 进行沟通时需要确认清楚是税前还是税后沟…...

【机器学习】Kaggle实战Rossmann商店销售预测(项目背景、数据介绍/加载/合并、特征工程、构建模型、模型预测)

文章目录 1、项目背景2、数据介绍3、数据加载3.1 查看数据3.2 空数据处理3.2.1 训练数据3.2.2 测试数据3.3.3 商店数据处理3.3.4 销售时间关系 4、合并数据5、特征工程6、构建训练数据和测试数据7、数据属性间相关性系数8、提取模型训练的数据集9、构建模型9.1 定义评价函数9.2…...

简化计算步骤以减少误差

简化计算步骤以减少误差 同样一个计算问题&#xff0c;若能减少运算次数&#xff0c;既可以节省计算机的计算时间&#xff0c;还可以减小舍人误差。 例 计算 x 255 x^{255} x255的值. 如果逐个相乘要用 254 次乘法&#xff0c;但若写成 x 255 x ⋅ x 2 ⋅ x 4 ⋅ x 8 ⋅…...

利用AI大模型和Mermaid生成流程图

核心点1&#xff1a;利用大模型生成流程图的语句&#xff08;Code&#xff09; 确定业务流程&#xff1a; 用户需要明确要绘制的业务流程&#xff0c;包括主要步骤、决策点以及各步骤之间的关系。将确定的业务流程以文字形式描述出来。 生成Mermaid代码&#xff1a; 将描述好的…...

SqlServer 杂项知识整理

目录 一. decimal字段类型二. 查询时加锁 一. decimal字段类型 ⏹decimal(8,3): 整数5位&#xff0c;小数3位。一共8位。 如果输入 20&#xff0c;会自动格式化为 20.000如果输入 20.1&#xff0c;会自动格式化为 20.100 -- 给数据库新增一个字段,类型要求是decimal类型 ALT…...

【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录

一、import导入css样式 在项目文件中创建一个common文件夹&#xff0c;下面创建一个css文件夹&#xff0c;里面放上style.css文件&#xff0c;编写的是公共样式&#xff0c;我们现在要在App.vue中引入该样式。 在App.vue中引入该样式&#xff0c;这样就会使样式全局生效&#…...

Maven 中 scope=provided 和 optional=true 的区别

先说效果&#xff0c;maven依赖声明中加了<scope>provided</scope>&#xff0c;或者加了<optional>true</optional>&#xff0c;从效果上看是一样的&#xff0c;都会中断依赖传递&#xff0c;观察下图&#xff1a; 图中&#xff0c;项目B分别依赖了C和…...

自动化测试与智能化测试的区别和关系

自动化测试与智能化测试的区别和关系 在现代软件开发过程中&#xff0c;测试环节是保证软件质量的重要组成部分。随着技术的不断进步&#xff0c;传统的手工测试方法逐渐无法满足高效、精确的需求&#xff0c;自动化测试&#xff08;Automated Testing&#xff09;应运而生。近…...

django在线考试系统

Django在线考试系统是一种基于Django框架开发的在线考试平台&#xff0c;它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境&#xff0c;满足教育机构、企业、个人等不同场景下的考试需求。通过该系统&#xff0c;用…...

centos9设置静态ip

CentOS 9 默认使用 NetworkManager 管理网络&#xff0c;而nmcli是 NetworkManager 命令行接口的缩写&#xff0c;是一个用来进行网络配置、管理网络连接的命令工具&#xff0c;可以简化网络设置&#xff0c;尤其是在无头&#xff08;没有图形界面&#xff09;环境下。 1、 cd…...

使用postMessage解决iframe与父页面传参

接收传递的消息时&#xff0c;可以将 window.addEventListener(message, function(e) { console.log(e.data) }) 写法&#xff0c;更换为 window.onmessage async function(e) {} 可以避免消息发送后&#xff0c;多次接收该参数 父页面js IframeEvent(){const send …...

浅谈云计算05 | 云存储等级及其接口工作原理

一、云存储设备 在当今数字化飞速发展的时代&#xff0c;数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频&#xff0c;到企业运营里的关键业务文档、客户资料&#xff0c;数据量呈爆炸式增长。面对海量的数据&#xff0c;如何安全、高效且便捷地存…...

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务&#xff1a; current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行&#xff1a; 定时周期调度设置…...

Linux 容器漏洞

定义&#xff1a;Linux 容器漏洞是指在容器技术&#xff08;如 Docker、LXC 等&#xff09;运行环境中存在的安全弱点。这些漏洞可能存在于容器镜像本身、容器运行时&#xff08;如 runc&#xff09;、容器编排工具&#xff08;如 Kubernetes&#xff09;或者容器与主机之间的交…...

前端依赖安装指南

前端依赖安装指南 一、NVM管理工具安装 1.在 Windows 上安装 下载 NVM for Windows 的安装程序&#xff1a;(最新版本可以在 nvm-windows Releases 页面 找到)运行下载的安装程序并按步骤操作。 2.配置 NVM exe安装自动配置环境变量 3. 验证 NVM 安装 验证 NVM 是否成功…...

滑动窗口限流算法:基于Redis有序集合的实现与优化

滑动窗口限流算法是一种基于时间窗口的流量控制策略&#xff0c;它将时间划分为固定大小的窗口&#xff0c;并在每个窗口内记录请求次数。通过动态滑动窗口&#xff0c;算法能够灵活调整限流速率&#xff0c;以应对流量的波动。 算法核心步骤 统计窗口内的请求数量&#xff1…...

JavaRestClient 客户端初始化+索引库操作

1. 介绍 ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给ES。 Elasticsearch目前最新版本是8.0&#xff0c;其java客户端有很大变化。不过大多数企业使用的还是8以下版本 2. 客户端初始化 在elastic…...

理解Spark中运行程序时数据被分区的过程

在Spark中&#xff0c;数据分区是指将数据集分割成多个小的子集&#xff0c;即分区&#xff0c;以便在集群的多个节点上并行处理&#xff0c;从而提高处理效率。以下通过一个具体例子来理解&#xff1a; 例子背景 假设要分析一个包含100万条销售记录的数据集&#xff0c;每条…...

【微服务】面试 7、幂等性

幂等性概念及场景 概念&#xff1a;多次调用方法或接口不改变业务状态&#xff0c;重复调用结果与单次调用一致。例如在京东下单&#xff0c;多次点击提交订单只能成功一次。场景&#xff1a;包括用户重复点击、网络波动导致多次请求、mq 消息重复消费、代码中设置失败或超时重…...

10步打造完美ASP.NET、Web API和控制台应用程序文件夹结构

一、前言 在大型项目中&#xff0c;合理的文件夹结构是项目成功的关键之一。一个好的文件夹结构就像是一座井然有序的图书馆&#xff0c;每一本书&#xff08;代码文件&#xff09;都有其固定的位置&#xff0c;让人能迅速找到所需。它可以让团队成员更容易理解和维护代码&…...

30_Redis哨兵模式

在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器处于不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性…...

双模充电桩发展前景:解锁新能源汽车未来的金钥匙,市场潜力无限

随着全球能源转型的浪潮席卷而来&#xff0c;新能源汽车行业正以前所未有的速度蓬勃发展&#xff0c;而作为其坚实后盾的充电基础设施&#xff0c;特别是双模充电桩&#xff0c;正逐渐成为推动这一变革的关键力量。本文将从多维度深入剖析双模充电桩的市场现状、显著优势、驱动…...

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥&#xff08;Story Bridge&#xff09;位于澳大利亚布里斯班&#xff0c;建造于1940年&#xff0c;全长777米&#xff0c;横跨布里斯班河&#xff0c;可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥&#xff0c;是全世界两座手工建…...

深入解析 C++ 类型转换

简介 C 类型转换是开发者必须掌握的重要技能之一, 无论是处理隐式转换还是显式转换, 理解其背后的机制与用法至关重要. 本篇博客旨在从基础到高级全面解析 C 的类型转换, 包括实际开发中的应用场景和性能分析. 自动转换 隐式类型转换 编译器可以在无需明确指示的情况下, 将一…...

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程&#xff0c;但太费劲了&#xff0c;这里有个非常简便的好方法&#xff0c;分享给大家。 1. 导入QXlsx库 转载链接 &#xff1a;https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…...

基于ILI9341液晶屏+STM32U5单片的显示试验

试验要求&#xff1a; 1、通过串口&#xff0c;下发两个命令 STR和PIC&#xff1b; 2、STR模式&#xff1a; &#xff08;1&#xff09;串口输入什么&#xff0c;屏幕上显示什么 &#xff08;2&#xff09;如果屏幕满&#xff0c;自动下滚 &#xff08;3&#xff09;输入回车&a…...

Vue.js组件开发-如何使用moment.js

在Vue.js组件开发中&#xff0c;需要处理日期和时间&#xff0c;moment.js 是一个非常有用的库。moment.js 提供了丰富的API来解析、验证、操作和显示日期和时间。 步骤&#xff1a; 1. 安装moment.js 首先&#xff0c;需要通过npm或yarn安装moment.js。在项目根目录下运行以…...

自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器

使用 Open AI 兼容的 API&#xff0c;可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑&#xff0c;私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量&#xff0c;为了简化网络配置&#…...

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

文章目录 Ubuntu 软件包管理器Ubuntu 软件包管理的基本概念常用的软件包管理器APTAPT常用命令 vimVim 的基本概念Vim 的工作模式Vim 的基本操作 gcc/gUbuntu 安装 gcc / g编译知识使用方法动静态函数库 Ubuntu 软件包管理器 在 **Ubuntu** 系统中&#xff0c;软件包管理器用于…...