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

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

 如何使用 Maven 将 Spring Boot 应用程序 Docker 化?

Docker是一个开源容器化工具,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring Boot 应用程序 docker 化以进行部署,我们将学习如何创建 Spring Boot 应用程序,以及如何为 Spring Boot 应用程序创建docker 镜像,并在docker 容器上运行它。

目录

  • Spring Boot 中的 Docker 是什么?
  • Spring Boot Docker Compose 做什么?
  • Docker化独立的Spring Boot应用程序
  • 如何在 Docker Compose 中部署 Spring Boot 应用程序?
  • 在容器中运行 Spring Boot Docker 映像
  • 如何更改基础镜像
  • 使用 Docker Compose 工具将 Spring Boot 应用程序 Docker 化

Spring Boot 中的 Docker 是什么?

Spring Boot应用程序中的Docker有助于将 Spring Boot 应用程序容器化。它支持应用程序提供一致性、可扩展性和易于部署。使用 Docker 时,开发人员将能够将应用程序与其依赖项和配置一起打包,确保它在不同环境中以相同的方式运行。这种方法有助于简化应用程序部署,提高资源利用率和增强可扩展性,使其成为现代云原生应用程序的理想选择。

使用 Maven 将 Spring Boot 应用程序 Docker 化是让您的应用程序更易于移植和管理的重要步骤。对于那些希望深入探索 Docker 化并掌握从开发到生产的整个过程的人来说,DevOps 工程 - 规划到生产课程提供了全面的指南。

Spring Boot Docker Compose 做什么?

使用docker compose 编写spring boot java 应用程序有助于实现多容器 spring boot 应用程序的无缝部署和管理。以下是它的一些好处:

  • 简化配置:它支持在单个 YAML 文件中定义和管理 Spring Boot 应用程序以及数据库和其他服务。
  • 一致的环境:它确保应用程序在开发、测试和生产环境中以相同的方式运行,从而最大限度地减少系统问题。
  • 可扩展性:它提供可扩展性功能,可以根据需求轻松地扩展或缩小 Spring Boot 服务,从而优化资源使用。
  • 高效的编排:实现相互依赖服务的启动、关闭和管理的自动化,从而简化部署过程。

Docker化独立的Spring Boot应用程序

独立 Spring Boot 应用程序:独立 Spring Boot 应用程序是利用 Spring Boot 框架的 Java 应用程序,无需外部服务器软件即可独立运行。它嵌入应用程序服务器,可以作为独立JAR 文件执行,从而简化部署并减少依赖性。

要将 Spring Boot 应用程序 docker 化,我们首先需要创建一个简单的 Spring Boot 应用程序。然后我们需要将 Maven 插件添加到我们的 XML 文件中,之后我们可以创建一个可执行 jar 文件。下一节将讨论并指导其实现。

如何在 Docker Compose 中部署 Spring Boot 应用程序?

以下是指导将 Spring Boot 应用程序 docker 化的步骤:

步骤 1:使用https://start.spring.io创建骨架应用程序。

第 2 步:现在创建一个具有以下配置的 maven 项目。输入所有详细信息后,单击“生成”按钮下载项目。

步骤3:解压压缩文件。

  • 现在,在您选择的 IDE 中打开它。

Spring Boot 构建包

借助 Spring Boot buildpacks,将 Spring Boot 应用打包到容器镜像中时无需Dockerfile和手动配置。它允许开发人员利用针对其 Spring Boot 项目的自动镜像生成功能,从而让他们能够专注于编写代码。

这些构建包会自动识别应用程序的先决条件,包括运行时参数和依赖项,并将所有内容组合在一起以制作适合生产的容器映像。这提高了开发人员的工作效率,简化了容器化过程,并提高了部署之间的一致性。

步骤 4:下面是使用 buildpacks 创建 docker 镜像的依赖项。现在我们需要在 pom.xml 文件中添加以下 Maven 插件。

<build>
      <plugins>
              <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
       </plugins>
</build>

第五步:打开项目的基础java文件,向应用程序的基类添加一个新的控制器。

@RequestMapping("/")
public String home() {return "Dockerizing Spring Boot Application";
}

步骤 6:现在,添加@RestController注释并导入所需的包。最后,您的 Application.java 文件应如下所示。

Java

package com.docker.spring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Dockerizing Spring Boot Application";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

步骤 7:现在通过运行以下命令启动应用程序,

$ ./mvnw spring-boot:run

  • 以下屏幕截图说明 java sprint boot 应用程序成功运行。

步骤8:导航到http://localhost:8080来测试应用程序。

项目结构

  • 此时项目结构应该是这样的,

Docker化我们的应用程序

步骤 9:生成 .jar 文件

  • 接下来,让我们通过在 IntelliJ 终端中执行命令 ./mvnw clean package 来生成 .jar 文件。此命令将编译项目、运行任何必要的测试,并将应用程序打包到 .jar 文件中。
  • 该过程完成后,导航到项目目录中的目标文件夹。您将在那里找到生成的 spring-0.0.1-SNAPSHOT.jar 文件。
  • 现在使用 maven builder 创建一个新的 jar 文件。
$ ./mvnw clean package
  • 上述命令将构建我们的 docker 镜像。下图表示通过执行上述命令生成 jar 文件。参考第二张图,构建成功并创建了 jar 文件。

  • 以下屏幕截图说明了使用 Maven 构建工具成功构建 Java 应用程序。

步骤 10:创建 Dockerfile

  • 在项目根目录下运行以下命令来构建 Dockerfile。此命令将在当前目录中创建一个空的Dockerfile 。
  • 创建 Dockerfile 后,您可以按照以下步骤继续定义构建Docker 映像所需的指令。

$ touch Dockerfile

步骤 11:添加配置以将 Spring Boot 应用程序 docker 化

  • 现在我们有一个可以运行的 Spring Boot 应用程序,要将应用程序 Docker 化,现在将以下内容粘贴到 Dockerfile 中:
FROM openjdk:18
WORKDIR /app
COPY ./target/spring-0.0.1-SNAPSHOT.jar /app
EXPOSE 8080
CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]

上述文件包含以下信息:

  • FROM openjdk:18–此行指定Docker 容器的基础镜像。在本例中,它使用标记为版本 18 的官方 OpenJDK 镜像。此镜像为 Java 应用程序提供运行时环境。
  • WORKDIR /app此行将容器内的工作目录设置为/app。所有后续命令都将相对于此目录执行。
  • COPY ./target/spring-0.0.1-SNAPSHOT.jar /app此命令将 Spring Boot 应用程序 JAR 文件从主机./target目录复制到/app容器内的目录。假设您已构建 Spring Boot 应用程序并且 JAR 文件位于指定位置。
  • EXPOSE 8080 - 此行通知 Docker 容器将在运行时监听端口 8080。但是,它实际上并未发布端口。它只是容器预期使用哪些端口的文档。
  • CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"] - 此命令指定容器启动时要运行的默认命令。它通过java -jar使用 Spring Boot JAR 文件作为参数执行命令来启动 Spring Boot 应用程序。

步骤 12:现在使用 docker build 命令创建一个 docker 镜像:

$ docker build -t [name:tag] .
  • -t:镜像的名称和标签
  • . :构建过程的背景

构建过程完成后,您将收到新镜像的 ID 和标签。

在容器中运行 Spring Boot Docker 映像

在容器中运行我们的镜像之前,让我们确保在尝试将容器端口映射到本地主机端口时避免任何潜在错误。为此,我们需要在Docker 命令Docker Compose文件中指定正确的端口绑定配置。这可确保容器的端口已公开并可从主机系统访问。

步骤 13:通过运行以下命令创建 Docker 容器:

$ docker run -d -p [host_port]:[container_port] --name [container_name] [image_id/image_tag]

  • -d:运行容器并打印容器ID。
  • -p:映射容器的端口
  • –name:为容器指定名称

步骤 14:通过运行以下命令验证容器是否已成功创建:

$ docker container ps

步骤15:检查项目

  • 确保项目结构符合标准程序并具有 Spring Boot 应用程序所需的所有部分。
  • 此外,确认应用程序的目录结构合理且定义明确,并且所有依赖项都配置正确。

步骤 16:检查申请

  • 打开 Web 浏览器并转到 http://localhost:8080/ 来检查该程序。这将显示计算机上正在运行的本地 Spring Boot 应用程序。

如何更改基础镜像

修改 Dockerfile 中的基础映像是一个简单的过程,但可能会对容器的大小、安全性和功能产生很大影响。请按照以下步骤修改基础映像:

1. 选择一个新的基础镜像 在进行任何更改之前,进行彻底的研究以获得符合应用程序要求的合适的基础镜像非常重要。

  • 操作系统、图片大小、安全功能以及与应用程序堆栈的兼容性都是需要考虑的重要因素。
  • 应优先考虑来自 Docker Hub 或其他可靠来源的官方镜像,以确保可靠性并符合安全最佳实践。
  • 通过仔细权衡这些考虑因素,您可以选择一个既能优化速度又能保证安全性的基础映像,作为您的容器化应用程序的坚实基础。

2. 更新 Dockerfile: 打开文本编辑器并选择您的 Dockerfile。查找文件开头的指令“FROM”,它表示当前基础映像。

  • 用新镜像替换现有镜像,如下面的示例所示。
FROM image:version  #Change the image and version as per your requirement

3. 调整依赖项和配置:由于新旧基础镜像之间的差异,可能需要更新 Dockerfile 中的依赖项、配置或指令。

  • 确保在新的基础映像上安装并配置了所有必需的工具、库和包。

4.验证您的更改:对 Dockerfile 进行更改后,使用“docker build”命令重新创建您的 Docker 映像:

docker build -t [name:tag] .

使用 Docker Compose 工具将 Spring Boot 应用程序 Docker 化

Dockerfiles 和 Docker 命令非常适合构建单个容器。如果我们想在应用程序的共享网络上操作,容器管理就会变慢。

Docker 提供了一个名为 Docker Compose 的工具来解决此问题。此实用程序采用 YAML 中独特的构建文件格式。多个服务的配置可以合并到一个名为 docker-compose.yml 的文件中。

Docker Compose 文件

以下是 Docker Compose 文件示例,它是用于编排多个服务的基本配置。它定义了两个服务“service1”和“service2”,每个服务都具有指定的 Docker 镜像、容器名称、公开端口和环境变量。我们可以根据需要修改版本。

版本:'3.8'
 

version: '3.8'services:spring-boot-app:image: openjdk:18container_name: spring-boot-appworking_dir: /appvolumes:- ./target/spring-0.0.1-SNAPSHOT.jar:/app/spring-0.0.1-SNAPSHOT.jarports:- "8080:8080"environment:- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydatabase- SPRING_DATASOURCE_USERNAME=root- SPRING_DATASOURCE_PASSWORD=exampledepends_on:- dbcommand: ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]db:image: mysql:8.0container_name: dbenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: mydatabaseports:- "3306:3306"volumes:- db_data:/var/lib/mysqlvolumes:db_data:
  • 以下命令用于构建docker-compose文件:
$ docker-compose config
  • 为了构建映像并创建 Docker 容器,我们可以使用以下命令:

$ docker-compose up --build

  • 要停止容器,我们应该将其从 Docker 中删除。为此,我们可以使用以下命令:

$docker-compose down

扩展服务

Docker Compose 中的扩展服务是指能够增加或减少 Docker Compose 文件中定义的服务实例数量。这可以通过调整服务的“scale”属性来指定要为该服务运行的容器数量来实现。

$ docker-compose --file docker-compose.yml up -d --build --scale service=1 --scale product-server=1

此操作将启动单个服务服务器和单个产品服务器。

最后

因此,通过这种方式,我们可以使用 Maven 插件将镜像发布到 Docker 容器。最好不要使用本地环境将 docker 镜像上传到任何注册表,使用CI/CD管道或任何工具始终是最佳实践。

使用 Maven 将 Spring Boot 应用程序 Docker 化 - 常见问题解答

如何将 Maven 项目 Docker化?

在项目根目录中创建一个Dockerfile,将应用程序的 JAR 文件复制到Docker 镜像中,并提供在容器内启动应用程序的命令,以便 Docker 化Maven 项目。

如何使用 Maven 建立 Spring Boot 应用程序?

创建一个新的 Maven 项目,并将必要的依赖项(例如 spring-boot-starter-parent 以及应用程序要求特有的任何其他依赖项)添加到 pom.xml 文件中,以使用 Maven 设置 Spring Boot 应用程序。接下来,按照推荐的目录布局为您的 Spring Boot 应用程序开发类和资源。

如何将 Spring Boot 微服务 Docker 化?

创建一个指定基础镜像的 Dockerfile,复制应用程序 JAR 文件,公开必要的端口,并描述启动应用程序的命令,以便将 Spring Boot微服务docker 化。接下来创建 Docker 镜像,并使用它来启动容器。

如何将我的项目 Docker化?

制作一个 Dockerfile,列出基础镜像、所需的库以及用于构建和执行应用程序的命令,以便将您的项目 Docker 化。

什么是 Dockerize 命令?

使用 Dockerize 命令可以将应用程序打包到Docker 容器中,从而可以轻松地在各种上下文中部署和执行。通常,它需要生成 Dockerfile,使用 docker build 生成镜像,然后使用 docker run 启动容器。

相关文章:

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化&#xff1f; Docker是一个开源容器化工具&#xff0c;用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中&#xff0c;为了将Spring B…...

微信小程序开发示例

微信小程序开发涉及多个方面&#xff0c;包括页面布局、交互逻辑、数据处理等。以下是一个简单的微信小程序开发示例&#xff0c;包括页面布局、样式定义、交互逻辑等方面的内容。 一、页面布局&#xff08;WXML&#xff09; <!-- index.wxml --> <view class"…...

【机器学习】概述

文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数&#xf…...

音视频采集推流时间戳记录方案

音视频同步更多文章 深入理解音视频pts&#xff0c;dts&#xff0c;time_base以及时间数学公式_视频pts计算-CSDN博客 ffplay音视频同步分析_ffplay 音视频同步-CSDN博客 音视频采集打时间戳设计 实时音视频数据的采集和处理场景。具体来说: 采集阶段: 在音视频数据采集过…...

【Linux】:线程安全 + 死锁问题

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 线程安全和重入问题&…...

【深度学习】时间序列表示方法

自然界除了2D的图片数据之外&#xff0c;还有语音、文字&#xff0c;这些数据都有时间的先后顺序的。对于2D的图像的数据&#xff0c;可以用RGB值来表示像素的色彩度。语音可以用信号幅度值来表示&#xff0c;而Pytorch没有自带String支持&#xff0c;在表示文字之前需要进行Em…...

1.微服务灰度发布落地实践(方案设计)

文章目录 前言灰度发布的优点设计概要系统架构图流量控制客户端服务端 路由路径应用客户端实现核心组件分析1.网关2. spring-cloud3. dubbo4. nocas5. thread6. message queue 前言 微服务架构中的灰度发布&#xff08;也称为金丝雀发布或渐进式发布&#xff09;是一种在不影响…...

【UE5 C++课程系列笔记】15——Assert的基本使用

目录 概念 一、Check 二、Verify 三、Ensure 对比 基本使用 一、check的基本使用 二、ensure的基本使用 三、verify的基本使用 概念 assert 可在开发期间帮助检测和诊断不正常或无效的运行时条件。这些条件通常检查是否指针为非空、除数为非零、函数并非递归运行&…...

kubernetes Gateway API-1-部署和基础配置

文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…...

likeAdmin架构部署(踩坑后的部署流程

1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven&#xff1a;>3.8 ❤️.9 (最好不要3.9已经试过失败 node &#xff1a;node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK&#xff1a;JDK8 node 需要换源 npm c…...

【一款超好用的开源笔记Logseq本地Docker部署与远程使用指南】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader

1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量&#xff08;Tensor&#xff09;数据进行简单包装整合的数据集类&#xff0c;它主要的作用是将相关联的数据&#xff08;比如特征数据和对应的标签数据等&#xff09;组合在一起&…...

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵 题目描述 小杨想要构造一个 m m m \times m m...

FFmpeg:详细安装教程与环境配置指南

FFmpeg 部署完整教程 在本篇博客中&#xff0c;我们将详细介绍如何下载并安装 FFmpeg&#xff0c;并将其添加到系统的环境变量中&#xff0c;以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户&#xff0c;这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…...

《特征工程:自动化浪潮下的坚守与变革》

在机器学习的广阔天地中&#xff0c;特征工程一直占据着举足轻重的地位。它宛如一位幕后的工匠&#xff0c;精心雕琢着原始数据&#xff0c;将其转化为能够被机器学习模型高效利用的特征&#xff0c;从而推动模型性能迈向新的高度。然而&#xff0c;随着技术的飞速发展&#xf…...

webrtc 源码阅读 make_ref_counted模板函数用法

目录 1. 模板参数解析 1.1 typename T 1.2 typename... Args 1.3 typename std::enable_if::value, T>::type* nullptr 2. scoped_refptr 3. new RefCountedObject(std::forward(args)...); 4. 综合说明 5.在webrtc中的用法 5.1 peerConnectionFactory对象的构建过…...

【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征的?附代码

【深度学习基础之多尺度特征提取】特征金字塔&#xff08;Feature Pyramid&#xff09;是如何在深度学习网络中提取多尺度特征的&#xff1f;附代码 【深度学习基础之多尺度特征提取】特征金字塔&#xff08;Feature Pyramid&#xff09;是如何在深度学习网络中提取多尺度特征…...

【Docker】离线安装 Docker

离线安装 Docker 在CentOS系统上安装Docker 1、下载 Docker 仓库文件 https://download.docker.com/linux/centos/docker-ce.repo 2、添加 Docker 仓库文件 将上一步下载的文件&#xff0c;移动到 /etc/yum.repos.d/ 目录 3、清除 YUM 缓存 sudo yum clean all sudo yum…...

三大行业案例:AI大模型+Agent实践全景

本文将从AI Agent和大模型的发展背景切入&#xff0c;结合51Talk、哈啰出行以及B站三个各具特色的行业案例&#xff0c;带你一窥事件驱动架构、RAG技术、人机协作流程&#xff0c;以及一整套行之有效的实操方法。具体包含内容有&#xff1a;51Talk如何让智能客服“主动进攻”&a…...

Dockerfile基础指令

1.FROM 基于基准镜像&#xff08;建议使用官方提供的镜像作为基准镜像&#xff0c;相对安全一些&#xff09; 举例&#xff1a; 制作基准镜像&#xff08;基于centos:lastest&#xff09; FROM cenots 不依赖于任何基准镜像 FROM scratch 依赖于9.0.22版本的tomcat镜像 FROM…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...