OpenStack-Glance组件
Glance
- Glance使用
- 磁盘格式和容器格式
- 基础配置
- 镜像转换
Glance 是 OpenStack 的镜像服务,负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像,用于启动虚拟机实例。
Glance 的主要功能
(1)虚拟机镜像的管理
支持镜像的上传、下载、删除和更新。
用户可以通过命令行、API 或 OpenStack Dashboard 管理镜像。
(2)多种镜像格式支持
Glance 支持常见的虚拟机镜像格式,包括:
- RAW:原始磁盘镜像,无压缩。
- QCOW2:QEMU/KVM 的可扩展镜像格式,支持快照和压缩。
- VMDK:VMware 的镜像格式。
- VHD 和 VHDX:Hyper-V 的镜像格式。
- ISO:光盘镜像,常用于安装系统。
(3)多种存储后端支持
Glance 支持多种存储后端,用于存储镜像数据:
本地文件系统。
分布式存储系统(如 Ceph、Swift)。
对象存储服务(如 Amazon S3)。
数据库存储。
(4)镜像共享和访问控制
私有镜像:仅限拥有者使用。
公共镜像:所有租户都可以使用。
共享镜像:拥有者可以指定其他租户访问。
(5)镜像的元数据管理
每个镜像都可以包含元数据(metadata),如操作系统类型、版本、创建时间等。
用户和管理员可以自定义元数据,用于描述镜像特性。
Glance 的架构
(1)核心组件
Glance 包括以下核心组件:
-
Glance API:
提供 RESTful API 接口,供用户和服务调用。
支持镜像的上传、下载、查询和删除等操作。 -
Glance Registry(已弃用):
旧版本用于存储镜像的元数据和注册信息,现在的元数据通常直接存储在数据库中。 -
数据库:
存储镜像的元数据(如镜像的名称、大小、状态、创建时间等)。
存储后端:
存放镜像文件的实际数据。可以是本地文件系统、对象存储(如 Swift)或块存储(如 Ceph,Cinder等)
工作流程
- 镜像上传:
用户通过 CLI 或 API 调用 Glance,将镜像文件上传到 Glance。
Glance API 接收镜像数据,并存储在指定的存储后端,同时在数据库中记录元数据。 - 镜像查询:
用户通过 Glance 查询可用的镜像列表。
Glance 从数据库中检索镜像元数据,并返回给用户。 - 镜像下载:
当 Nova 启动实例时,会从 Glance 下载指定镜像到计算节点。
Glance API 从存储后端检索镜像文件,并提供给 Nova。
Glance使用
Ubuntu2404server环境,Glance版本4.4.0
glance服务
systemctl status glance-api
日志路径
tail -f /var/log/glance/glance-api.log
glance默认的镜像存储位置为本地,在配置文件glance-api.conf中进行指定
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[image_format]
disk_formats = ami,ari,aki,vhd,vhdx,vmdk,raw,qcow2,vdi,iso,ploop.root-tar
上传cirros测试镜像,web界面也可以上传镜像,但是如果镜像很大则可能失败,这时用命令行界面上传可以成功
Glance的其他命令可参考博文,这里不多概述了
root@controller:~# openstack image create --disk-format qcow2 --container-format bare --file cirros-0.3.4-x86_64-disk.img --progress cirros
[=============================>] 100%
+------------------+-----------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+-----------------------------------------------------------------------------------------------------------+
| container_format | bare |
| created_at | 2024-12-03T08:39:25Z |
| disk_format | qcow2 |
| file | /v2/images/500df5b1-45e7-4cf0-acfe-621b2c61ae5b/file |
| id | 500df5b1-45e7-4cf0-acfe-621b2c61ae5b |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| owner | e85a7093d85344378bb1b016fc6a1b1b |
| properties | os_hidden='False', owner_specified.openstack.md5='', owner_specified.openstack.object='images/cirros', |
| | owner_specified.openstack.sha256='' |
| protected | False |
| schema | /v2/schemas/image |
| status | queued |
| tags | |
| updated_at | 2024-12-03T08:39:25Z |
| visibility | shared |
+------------------+-----------------------------------------------------------------------------------------------------------+
root@controller:~# ls /var/lib/glance/images
500df5b1-45e7-4cf0-acfe-621b2c61ae5b
上传的镜像除了存储在本地外,还可以配置cinder,swift,ceph等作为后端存储
- 镜像状态
- Glance 中的图像可以处于以下状态之一:
queued
图像标识符已为 Glance 注册表中的图像保留。没有图像数据上传到 Glance,并且图像大小在创建时未明确设置为零。
saving
表示当前正在将图片的原始数据上传到 Glance。当使用POST /images调用注册图片并且存在x-image-meta-location标头时,该图片永远不会处于保存状态(因为图片数据已在其他位置可用)。
uploading
表示已进行导入数据放入调用。在此状态下,不允许调用PUT /file 。(请注意,对排队图像调用PUT /file会使图像进入保存状态。当图像处于保存状态时,不允许调用PUT /stage。因此,无法在同一图像上使用两种上传方法。)
importing
表示已进行导入调用但图像尚未准备好使用。
active
表示在 Glance 中完全可用的镜像。当上传镜像数据或创建时明确将镜像大小设置为零时,就会发生这种情况。
deactivated
表示不允许任何非管理员用户访问图像数据。禁止下载图像还会禁止可能需要图像数据的图像导出和图像克隆等操作。
killed
表示上传图像数据时发生错误,图像无法读取。
deleted
Glance 保留了有关该镜像的信息,但已不再可用。处于此状态的镜像将在稍后自动删除。
pending_delete
这与已删除类似,但是 Glance 尚未删除映像数据。处于此状态的映像不可恢复。
- Glance 中的图像可以处于以下状态之一:
任务状态
- Glance 中的任务可以处于以下状态之一:
pending
任务标识符已为 Glance 中的任务保留。尚未开始对其进行处理。
processing
该任务已被底层执行器接收,并正在使用该任务类型的后端 Glance 执行逻辑运行。
success
表示该任务已在 Glance 中成功运行。result 任务字段显示有关结果的更多详细信息。
failure
表示在执行任务期间发生错误,无法继续处理。message任务的字段显示错误是什么。
磁盘格式和容器格式
在 OpenStack 的 Glance 服务中,镜像文件需要指定磁盘格式和容器格式。这两个属性决定了镜像文件的组织方式,以及它如何被用作虚拟机实例的磁盘。
- 磁盘格式(Disk Format)
磁盘格式描述镜像文件中虚拟磁盘的存储方式。它决定了镜像如何被解码和加载到虚拟机中, 决定了镜像的存储结构,影响性能、存储占用和功能支持。
格式名称 | 描述 | 使用场景 |
---|---|---|
RAW | 原始磁盘镜像文件,未压缩,未封装。 | 直接复制磁盘的字节内容,效率高但占用空间较大。 |
QCOW2 | QEMU/KVM 的磁盘格式,支持动态分配和快照。 | 文件占用空间小,支持压缩。 常用格式,适合 KVM/QEMU。 |
VMDK | VMware 的磁盘格式,兼容 VMware 产品。 | 使用 VMware 虚拟化平台时。 |
VHD | Microsoft Hyper-V 的磁盘格式,支持动态和固定大小。 | 在 Hyper-V 环境中使用。 |
ISO | 光盘镜像格式,通常用于操作系统的安装盘(例如 Ubuntu、CentOS 的安装 ISO)。 | 系统安装或启动时加载 ISO 文件。 |
AMI | Amazon Machine Image,Amazon EC2 使用的镜像格式。 | 使用 Amazon EC2 云的迁移场景。 |
VDI | VirtualBox 的磁盘格式。 | VirtualBox 用户使用。 |
PLAIN | 非特定格式的数据块镜像,类似于 RAW 格式。 | 特殊场景的自定义存储。 |
- 容器格式(Container Format)
容器格式定义了磁盘镜像的封装方式,以及它是否包含额外的元数据(如启动引导信息、分区表等)。决定了镜像的封装方式,影响其在虚拟化平台上的适用性。
格式名称 | 描述 | 使用场景 |
---|---|---|
bare | 无容器封装的纯磁盘镜像,直接使用磁盘格式(如 RAW、QCOW2)。 | 最常见的容器格式,直接加载磁盘镜像。 |
ovf | Open Virtualization Format,包含虚拟机描述文件和磁盘镜像。 | 跨虚拟化平台迁移或分发镜像。 |
ova | OVF 的封装形式,通常打包为单个文件(包含 OVF 描述和磁盘镜像)。 | 分发虚拟机模板。 |
aki | Amazon Kernel Image,封装用于引导的内核镜像。 | 使用 Amazon 相关服务时。 |
ari | Amazon Ramdisk Image,封装用于引导的 ramdisk 镜像。 | 使用 Amazon 相关服务时。 |
ami | Amazon Machine Image,与磁盘格式 AMI 搭配使用,通常是 Amazon 的完整镜像。 | 使用 Amazon 相关服务时。 |
docker | Docker 容器格式,用于分发和运行容器化应用。 | 容器化场景。 |
- 磁盘格式和容器格式的关系
磁盘格式 和 容器格式 是独立的,但需要配合使用。
例如:
一个 RAW 磁盘镜像通常使用 bare 容器格式,因为它没有额外的封装。
一个 OVF 容器格式的镜像可能使用 QCOW2 或 VMDK 磁盘格式。
如何选择格式
需求 | 磁盘格式 | 容器格式 |
---|---|---|
高性能,简单直接 | RAW | bare |
节省存储空间,支持快照 | QCOW2 | bare |
VMware 平台迁移或集成 | VMDK | ovf |
Hyper-V 平台 | VHD/VHDX | bare |
创建系统安装盘(如 ISO 文件) | ISO | bare |
基础配置
官网示例配置文件
官网参数说明
- glance-api.conf可以在文件中的 部分下放置以下选项[DEFAULT]。它们分别启用 API 服务器的启动和绑定行为。
[DEFAULT]
bind_host=ADDRESS
#绑定到的主机的地址。
#可选。默认值:0.0.0.0
bind_port=PORT
#服务器应绑定到的端口。
#可选。默认值:9292用于 API 服务器
backlog=REQUESTS
#配置套接字的积压请求数。
#可选。默认值:4096
tcp_keepidle=SECONDS
#为每个服务器套接字设置 TCP_KEEPIDLE 的值(以秒为单位)。不支持 OS X。
#可选。默认值:600
client_socket_timeout=SECONDS
#客户端连接套接字操作的超时时间。如果传入连接在此期间处于空闲状态,则它将被关闭。值为0 表示永远等待。
#可选。默认值:900
workers=PROCESSES
#要启动的 Glance API 工作进程数。每个工作进程将侦听同一端口。增加此值可能会提高性能(尤其是在使用启用了压缩的 SSL 时)。通常建议
#每个 CPU 有一个工作进程。值0将阻止创建任何新的工作进程。当data_api设置为 时 glance.db.simple.api,workers必须设置为0或1。
#可选。默认值:默认使用可用的 CPU 数量。
max_request_id_length=LENGTH
#限制记录的 x-openstack-request-id 标头的最大大小。仅当在管道中配置了上下文中间件时才有效。
#可选。默认值:(64受 max_header_line 默认值限制:16384)image_size_cap=SIZE
#配置 Glance 镜像大小限制
#可通过 Glance API 服务器上传的最大图像大小(以字节为单位)。
#重要提示:只有经过仔细考虑后才能增加此值,并且必须将其设置为低于 8 EB (9223372036854775808) 的值。
#可选。默认值:1099511627776(1 TB)user_storage_quota=100G
#可选。默认值:0(无限制)。
#配置 Glance 用户存储配额
#此值指定每个用户可以在所有存储系统上使用的最大存储量。可以选择为该值指定单位。值可以以 B、KB、MB、GB 或 TB 为单位,分别表示字节、千字节、兆字节、千兆字节和太字节。默认单位为字节。
- 配置 Glance 存储后端
使用多个存储配置文件系统存储后端
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadirs = /var/glance/store
filesystem_store_datadirs = /var/glance/store1:100
filesystem_store_datadirs = /var/glance/store2:200
此选项只能在配置文件中指定,并且仅适用于文件系统存储后端。
filesystem_store_datadirs 选项允许管理员配置多个存储目录,以在文件系统存储后端保存 Glance 映像。每个目录都可以与其优先级结合使用。
- 可以多次指定此选项以指定多个商店。
必须在 gaze-api.conf 中指定 filesystem_store_datadir 或 filesystem_store_datadirs 选项
优先级为 200 的商店优先于优先级为 100 的商店。
如果没有指定优先级,则默认优先级为“0”。
如果两个文件系统存储具有相同的优先级,则会选择具有最大可用空间的存储来存储图像。
如果多次指定同一个商店,则会引发 BadStoreConfiguration 异常。
配置cinder为后端存储
[root@controller ~]# vi /etc/glance/glance-api.conf
#show_multiple_locations = false
改为
show_multiple_locations = True修改
[glance_store]
stores = cinder
default_store=cinder[root@controller ~]# systemctl restart openstack-glance-*
[root@controller ~]# vi /etc/cinder/cinder.conf
#allowed_direct_url_schemes =
改为
allowed_direct_url_schemes =cinder#image_upload_use_internal_tenant = false
改为
image_upload_use_internal_tenant = True
#最后重启cinder
[root@controller ~]# systemctl restart *cinder*
swift作为后端存储
[root@controller ~]# vi /etc/glance/glance-api.conf
[glance_store]
stores=glance.store.filesystem.Store,glance.store.swift.Store,glance.store.http.Store
default_store=swift
swift_store_region=RegionOne
swift_store_endpoint_type=internalURL
swift_store_container=chinaskill_glance
swift_store_large_object_size=5120
swift_store_large_object_chunk_size=200
swift_store_create_container_on_put=True
swift_store_multi_tenant=True
swift_store_admin_tenants=service
swift_store_auth_address=http://controller:5000/v3
swift_store_user=glance
swift_store_key=000000[root@controller ~]# systemctl restart openstack-glance-*
配置 VMware 存储后端
- vmware_server_host=ADDRESS
使用 VMware 存储后端时必需。
只能在配置文件中指定。
设置 ESX/ESXi 或 vCenter Server 目标系统的地址。该地址可以包含 IP ( 127.0.0.1)、IP 和端口 ( 127.0.0.1:443)、DNS 名称 ( www.my-domain.com) 或 DNS 和端口。
此选项特定于 VMware 存储后端。 - vmware_server_username=USERNAME
使用 VMware 存储后端时必需。
只能在配置文件中指定。
用于通过 VMware ESX/ESXi 或 vCenter Server 进行身份验证的用户名。 - vmware_server_password=PASSWORD
使用 VMware 存储后端时必需。
只能在配置文件中指定。
用于对 VMware ESX/ESXi 或 vCenter Server 进行身份验证的密码。 - vmware_datastores
使用 VMware 存储后端时必需。
此选项只能在配置文件中指定,并且特定于 VMware 存储后端。 - vmware_datastores 允许管理员配置多个数据存储,以将 Glance 映像保存在 VMware 存储后端。该选项所需的格式为:<datacenter_path>:<datastore_name>:<optional_weight>。
其中 datacenter_path 是数据存储所在数据中心的清单路径。可以给出可选权重来指定优先级。 - vmware_api_retry_count=TIMES
可选。默认值:10
只能在配置文件中指定。
出现连接相关问题时必须重试 VMware ESX/VC 服务器 API 的次数。 - vmware_task_poll_interval=SECONDS
可选。默认值:5
只能在配置文件中指定。
用于轮询在 VMware ESX/VC 服务器上调用的远程任务的间隔。 - vmware_store_image_dir
可选。默认值:/openstack_glance
只能在配置文件中指定。
访问数据存储中存储图像的文件夹的路径。 - vmware_api_insecure=ON_OFF
可选。默认值:False
只能在配置文件中指定。
允许对 ESX/VC 服务器执行不安全的 SSL 请求。
例子:
[glance_store]
vmware_datastores = datacenter1:datastore1
vmware_datastores = dc_folder/datacenter2:datastore2:100
vmware_datastores = datacenter1:datastore3:200
可以多次指定此选项以指定多个数据存储。
必须在 gaze-api.conf 中指定 vmware_datastore_name 或 vmware_datastores 选项
权重为 200 的数据存储优先于权重为 100 的数据存储。
如果没有指定权重,则默认权重为“0”。
如果两个数据存储具有相同的权重,则将选择具有最大可用空间的数据存储来存储图像。
如果数据中心路径或数据存储名称包含冒号 :符号,则必须使用反斜杠进行转义。
配置S3存储后端
- s3_store_host
只能在配置文件中指定。
S3 服务器正在监听的主机。此选项可以包含 DNS 名称(例如 s3.amazonaws.com、my-object-storage.com)或 IP 地址(127.0.0.1)。 - s3_store_access_key
只能在配置文件中指定。
用于与 Amazon S3 或 S3 兼容存储服务器进行身份验证的访问密钥。 - s3_store_secret_key
只能在配置文件中指定。
用于与 Amazon S3 或 S3 兼容存储服务器进行身份验证的密钥。 - s3_store_bucket
只能在配置文件中指定。
在 S3 中存储 Glance 图像的存储桶名称。如果s3_store_create_bucket_on_put设置为 true,即使存储桶不存在也会自动创建。 - s3_store_create_bucket_on_put
可选。默认值:False
只能在配置文件中指定。
确定 S3 是否应创建新的 bucket。此选项采用布尔值来指示如果 bucket 不存在,Glance 是否应在 S3 中创建新的 bucket。 - s3_store_bucket_url_format
可选。默认值:auto
只能在配置文件中指定。
此选项采用用于指定 S3 存储桶中对象地址的访问模型。您可以将值设置为auto、virtual或 path。 - s3_store_large_object_size
可选。默认值:100
只能在配置文件中指定。
S3 应以什么大小(以 MB 为单位)开始对图像文件进行分块并在 S3 中执行分段上传。 - s3_store_large_object_chunk_size
可选。默认值:10
只能在配置文件中指定。
S3 在上传部分时应使用多部分上传部分的大小(以 MB 为单位)。 - s3_store_thread_pools
可选。默认值:10
只能在配置文件中指定。
在 S3 中执行分段上传的线程池数量。
示例:
[glance_store]
s3_store_host = http://s3-ap-northeast-1.amazonaws.com
s3_store_host = https://s3-ap-northeast-1.amazonaws.com
s3_store_host = http://my-object-storage.com
s3_store_host = https://my-object-storage.com:9000
在path风格中,对象的端点看起来像https://s3.amazonaws.com/bucket/example.img。
在virtual风格中,对象的端点看起来像https://bucket.s3.amazonaws.com/example.img。
如果您在存储桶名称中不遵循 DNS 命名约定,则可以获取路径样式的对象,但不能获取虚拟样式的对象。
配置镜像策略的yaml文件:官网
- 配置格式如下
该配置文件通过role:admin形式指定配置权限
root@controller:~# cat /etc/glance/policy.yaml
{"context_is_admin": "role:admin","default": "role:admin","add_image": "role:admin","delete_image": "","get_image": "","get_images": "","modify_image": "","publicize_image": "role:admin","communitize_image": "","copy_from": "","download_image": "","upload_image": "","delete_image_location": "","get_image_location": "","set_image_location": "","add_member": "","delete_member": "","get_member": "","get_members": "","modify_member": "","manage_image_cache": "role:admin","get_task": "","get_tasks": "","add_task": "","modify_task": "","tasks_api_access": "role:admin","deactivate": "","reactivate": "","get_metadef_namespace": "","get_metadef_namespaces":"","modify_metadef_namespace":"","add_metadef_namespace":"","get_metadef_object":"","get_metadef_objects":"","modify_metadef_object":"","add_metadef_object":"","list_metadef_resource_types":"","get_metadef_resource_type":"","add_metadef_resource_type_association":"","get_metadef_property":"","get_metadef_properties":"","modify_metadef_property":"","add_metadef_property":"","get_metadef_tag":"","get_metadef_tags":"","modify_metadef_tag":"","add_metadef_tag":"","add_metadef_tags":""
}
镜像转换
qemu-img 是 QEMU 提供的一个用于创建、转换和操作虚拟机磁盘镜像的命令行工具。它支持多种磁盘镜像格式,如 QCOW2、RAW、VMDK 等,是管理虚拟磁盘镜像的核心工具之一
- 查看镜像信息
输出镜像的大小、格式、实际占用空间等信息
root@controller:~# qemu-img info cirros-0.3.4-x86_64-disk.img
image: cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 39.2 MiB (41126400 bytes)
disk size: 12.7 MiB
cluster_size: 65536
Format specific information:compat: 0.10compression type: zlibrefcount bits: 16
Child node '/file':filename: cirros-0.3.4-x86_64-disk.imgprotocol type: filefile length: 12.7 MiB (13287936 bytes)disk size: 12.7 MiB
- 转换磁盘格式
将磁盘镜像从一种格式转换为另一种格式
qemu-img convert -f <源格式> -O <目标格式> <源镜像文件> <目标镜像文件>
root@controller:~# qemu-img convert -f qcow2 -O raw cirros-0.3.4-x86_64-disk.img cirros-raw.img
root@controller:~# qemu-img info cirros-raw.img
image: cirros-raw.img
file format: raw
virtual size: 39.2 MiB (41126400 bytes)
disk size: 17.8 MiB
Child node '/file':filename: cirros-raw.imgprotocol type: filefile length: 39.2 MiB (41126400 bytes)disk size: 17.8 MiB
- 扩展磁盘大小
调整磁盘镜像的大小(只能扩展)需要在操作系统中调整分区才能实际使用扩展空间。
root@controller:~# qemu-img resize cirros-0.3.4-x86_64-disk.img +10M
Image resized.
root@controller:~# qemu-img info cirros-0.3.4-x86_64-disk.img
image: cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 49.2 MiB (51612160 bytes)
disk size: 12.7 MiB
cluster_size: 65536
Format specific information:compat: 0.10compression type: zlibrefcount bits: 16
Child node '/file':filename: cirros-0.3.4-x86_64-disk.imgprotocol type: filefile length: 12.7 MiB (13287936 bytes)disk size: 12.7 MiB
root@controller:~#
- 压缩磁盘镜像
将磁盘镜像压缩以节省存储空间(适用于 QCOW2)
qemu-img convert -O qcow2 -c <源镜像文件> <目标镜像文件>
root@controller:~# qemu-img convert -O qcow2 -c cirros-0.3.4-x86_64-disk.img cirros-qcow2.img
相关文章:
OpenStack-Glance组件
Glance Glance使用磁盘格式和容器格式基础配置镜像转换 Glance 是 OpenStack 的镜像服务,负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像,用于启动虚拟机实例。 Glance 的主要功能 (1)虚拟机镜像的管理 支持镜像的上…...
写译热点单词 | 50篇文章整理 | 手敲自用
目录 文化类 政治类 经济类 教育类 科技类 健康类 安全类 体育类 第二版 删去了部分不太常用的 文化类 1. 阴历: lunar calendar 2. 阳历: solar calendar 3. 春节: the Spring Festival 4. 除夕: Chinese New Year’s Eve 5. 清明节: Tomb Sweeping Day 6. 重阳…...
【UE5 C++】判断两点连线是否穿过球体
目录 前言 方法一 原理 代码 测试 结果 方法二 原理 一、检查连线与球体的相交情况 二、检查距离与球体半径的关系 三、检查连线与球体的相交 代码 前言 通过数学原理判断空间中任意两点的连线是否穿过球体,再通过射线检测检验算法的正确性。 方法一 …...
A1228 php+Mysql旅游供需平台的设计与实现 导游接单 旅游订单 旅游分享网站 thinkphp框架 源码 配置 文档 全套资料
旅游供需平台 1.项目描述2. 开发背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着社会经济的快速发展,生活水平的提高,人们对旅游的需求日益增强,因此,为给用户提供一个便利的查看导游信息,进行导游招募的平…...
【linux】服务器Ubuntu20.04安装cuda11.8教程
【linux】服务器Ubuntu20.04安装cuda11.8教程 文章目录 【linux】服务器Ubuntu20.04安装cuda11.8教程到官网找到对应版本下载链接终端操作cudnn安装到官网下载下载后解压进入解压后的目录:将头文件复制到 /usr/local/cuda/include/ 目录:将库文件复制到 …...
SpringMVC其他扩展
一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中,…...
用“*”构成一个倒三角形:JAVA
输入:5 输出: ******* ***** *** * 代码: import java.util.Scanner; //倒三角 public class FF6 {public static void main(String[] args) {Scanner scannernew Scanner(System.in);while (scanner.hasNextInt()){int nscanner…...
洛谷P2670扫雷游戏(Java)
三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩…...
Windows 11 环境下 条码阅读器输入到记事本的内容不完整
使用Windows11时,为什么记事本应用程序中的扫描数据被截断或不完整?为什么sdo 特殊字符的显示与Windows 10 记事本应用程序不同? 很多人认为和中文输入法有关,其实主要问题出在这个windows11下的记事本程序上,大家知道这个就可以了&#x…...
C# 动态类型 Dynamic
文章目录 前言1. 什么是 Dynamic?2. 声明 Dynamic 变量3. Dynamic 的运行时类型检查4. 动态类型与反射的对比5. 使用 Dynamic 进行动态方法调用6. Dynamic 与 原生类型的兼容性7. 动态与 LINQ 的结合8. 结合 DLR 特性9. 动态类型的性能考虑10. 何时使用 Dynamic&…...
设计模式10:观察者模式(订阅-发布)
系列总链接:《大话设计模式》学习记录_net 大话设计-CSDN博客 参考:简说设计模式——工厂方法模式 - JAdam - 博客园 参考:简单工厂模式(Simple Factory Pattern) - 回忆酿的甜 - 博客园 一:概述 观察者模式࿰…...
2020 年 12 月青少年软编等考 C 语言四级真题解析
目录 T1. 开餐馆思路分析T2. 邮票收集思路分析T3. 带通配符的字符串匹配思路分析T4. 删除数字思路分析T1. 开餐馆 北大信息学院的同学小明毕业之后打算创业开餐馆。现在共有 n n n 个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n n n 个地点排列在同一条直线…...
高级java每日一道面试题-2024年12月03日-JVM篇-什么是Stop The World? 什么是OopMap? 什么是安全点?
如果有遗漏,评论区告诉我进行补充 面试官: 什么是Stop The World? 什么是OopMap? 什么是安全点? 我回答: 在Java虚拟机(JVM)中,Stop The World、OopMap 和 安全点 是与垃圾回收(GC)和性能优化密切相关的概念。理…...
探索 Apache Commons Collections 4:Java 集合框架的强大扩展
在 Java 开发中,集合框架是处理数据的核心工具。然而,标准 Java 集合框架虽然功能强大,但在某些场景下仍显得不够灵活。Apache Commons Collections 4(以下简称 commons-collections4)作为一个强大的工具库,…...
NIO(New IO)和BIO(Blocking IO)的区别
Java中的NIO(New IO)和BIO(Blocking IO)的区别及NIO的核心组件 Java中的NIO(New IO)和BIO(Blocking IO)是两种不同的网络通信模型,各自具有独特的特性和适用场景。下面将…...
【串口助手开发】visual studio 使用C#开发串口助手,生成在其他电脑上可执行文件,可运行的程序
1、改成Release,生成解决方案 串口助手调试成功后,将Debug改为Release,点击生成解决方案 2、运行exe文件 生成解决方案后,在bin文件夹下, Release文件夹下,生成相关文件 复制一整个Release文件夹…...
Linux 编译 convert_geotiff 时遇到的几个问题
步骤1:安装libgeotiff-dev 在ubuntu上,安装命令为: sudo apt-get install libgeotiff-dev在macos上,安装命令为: brew install libgeotiff在Linux上安装命令为: sudo yum install libgeotiff-devel注意…...
执行存储过程报:This function has none of DETERMINISTIC, NO SQL ???
执行存储过程时报如下错你该怎么整? [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)来…...
JAVA |日常开发中Servlet详解
JAVA |日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化(init 方法)2.3 服务(service 方法)2.4 销毁(destroy 方法) 三、Se…...
Spring Cloud Alibaba 之 “Sentinel”
从网上下载好sentinel-dashboard-1.6.3.jar,然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080,Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…...
UE4外挂实现分析-PC端-附源码
UE4外挂实现分析-PC端 游戏分析 分析工具: Cheat Engine 7.5 x64dbg IDA Pro 参考文章: UE4逆向笔记之GWORLD GName GameInstance - 小透明‘s Blog 【项目源码下载】https://download.csdn.net/download/Runnymmede/90079718 本次分析的游戏使用UE4.2…...
力扣88题:合并两个有序数组
力扣88题:合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2,以及它们的长度 m 和 n,要求将 nums2 合并到 nums1,使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1: 输入&am…...
Lua面向对象实现
Lua中的面向对象是通过表(table)来模拟类实现的,通过setmetatable(table,metatable)方法,将一个表设置为当前表的元表,之后在调用当前表没有的方法或者键时,会再查询元表中的方法和键,以此来实现…...
小程序 模版与配置
WXML模版语法 一、数据绑定 1、数据绑定的基本原则 (1)在data中定义数据 (2)在WXML中使用数据 2、在data中定义页面的数据 3、Mustache语法的格式(双大括号) 4、Mustache语法的应用场景 (…...
【Elasticsearch】实现分布式系统日志高效追踪
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
探索Go语言中的循环单链表
简介 循环单链表是一种特殊的链表数据结构,它的最后一个节点指向链表的头节点,形成一个闭环。今天我们将探讨如何在Go语言中实现和操作这种数据结构。 为什么选择循环单链表? 连续访问:在循环单链表中,可以无限循环…...
[go-redis]客户端的创建与配置说明
创建redis client 使用go-redis库进行创建redis客户端比较简单,只需要调用redis.NewClient接口创建一个客户端 redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379",Password: "",DB: 0, })NewClient接口只接收一个参数red…...
Windows 和 Linux 系统命令行操作详解:从文件管理到进程监控
1.切换盘符与目录操作 在命令行中,切换盘符和目录是最常见的操作。尽管 DOS 和 Linux 在这些操作上有所不同,但它们都能实现相似的功能。 (1)切换盘符 ①DOS命令:在 DOS 中,切换盘符非常简单,使用 盘符名:ÿ…...
SpringBoot中@Import和@ImportResource和@PropertySource
1. Import Import注解是引入java类: 导入Configuration注解的配置类(4.2版本之前只可以导入配置类,4.2版本之后也可以导入普通类)导入ImportSelector的实现类导入ImportBeanDefinitionRegistrar的实现类 SpringBootApplication…...
etcd-v3.5release-(3)-readIndexRead
笔记1:读操作包括两种,readIndex和serilizable,readIndex指一致性读,一旦a读到了数据x,那么a及a以后的数据都能读到x,readIndex读会先确认本leader是不是有效地leader,如果有效则记录此刻的comm…...
Chrome 中小于 12px 文字的实现方式与应用场景详解
让 Chrome 支持小于 12px 的文字 在 Web 开发中,有时需要将文字显示为小于 12px 的尺寸,尤其是在设计精细的 UI 元素时。虽然大多数浏览器支持小于 12px 的字体大小,但 Chrome 默认情况下会通过调整文本渲染来确保文字可读性,尤其在非常小的文字尺寸下,可能会进行抗锯齿处…...
数据挖掘之数据预处理
引言 数据挖掘是从大量数据中提取有用信息和知识的过程。在这个过程中,数据预处理是不可或缺的关键步骤。数据预处理旨在清理和转换数据,以提高数据质量,从而为后续的数据挖掘任务奠定坚实的基础。由于现实世界中的数据通常…...
slam学习笔记6---样例展示雅可比手推过程
背景:一直在使用模板、自动化求导,对于背后雅可比推导只剩一个基本概念,有必要好好梳理巩固一下。本人水平有限,若推导过程有误,欢迎评论区提出。 假设一个二维slam问题,使用欧式距离观测模型,…...
ThreadLocal 详解
ThreadLocal 详解 ThreadLocal 是 Java 提供的一种线程本地存储机制,用于为每个线程提供独立的变量副本,变量的值仅在线程内可见,从而实现线程隔离。这种特性在需要为每个线程维护独立状态的场景中非常有用,例如用户上下文、事务…...
SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …...
Unity 基于Collider 组件在3D 物体表面放置3D 物体
实现 从鼠标点击的屏幕位置发送射线,以射线监测点击到的物体,根据点击物体的法线向量调整放置物体的位置及朝向。 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100)) {obj.transform.…...
项目搭建:springboot,mybatis, maven
创建一个基于Spring Boot、MyBatis和Maven的项目可以简化很多配置,因为Spring Boot自带了很多自动配置的功能。下面我将给出一个简单的示例来展示如何搭建这样一个项目。 ### 1. 创建一个新的Spring Boot项目 你可以通过Spring Initializr(https://sta…...
网页端五子棋对战(四)---玩家匹配实现上线下线处理
文章目录 1.游戏大厅用户匹配1.1请求和响应1.2设计匹配页面1.3获取玩家信息1.4玩家信息的样式设置1.5初始化我们的websocket1.6点击按钮和客户端交互1.7点击按钮和服务器端交互 2.服务器端实现匹配功能框架2.1方法重写2.2借用session 3.处理上线下线3.1什么是上线下线3.2实现用…...
Linux笔记---进程:进程替换
1. 进程替换的概念 进程替换是指在一个正在运行的进程中,用一个新的程序替换当前进程的代码和数据,使得进程开始执行新的程序,而不是原来的程序。 这种技术通常用于在不创建新进程的情况下,改变进程的行为。 我们之前谈到过for…...
【AI日记】24.12.04 kaggle 比赛 Titanic-7
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容: 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习基础(pandas,numpy,sklearn,seaborn,matplotl…...
使用 Flutter 进行移动应用开发:深入探索
文章目录 前言一、介绍二、安装 Flutter 环境三、Flutter 应用结构与基础组件四、状态管理策略五、高级主题结语 前言 随着移动技术的迅猛发展,跨平台开发的需求日益增长。开发者们一直在寻找一种既能保证应用性能又能减少开发成本和时间的技术方案。Flutter 应运而…...
SQLServer 服务器只接受 TLS1.0,但是客户端给的是 TLS1.2
Caused by: javax.net.ssl.SSLHandshakeException: the server selected protocol version TLS10 is not accepted by client preferences [TLS12] 原因描述:SQLServer 服务器只接受 TLS1.0,但是客户端给的是 TLS1.2 解决方法如下: 打开文件…...
Linux命令行解释器的模拟实现
欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:Linux命令行解释器 制作日期:2024.12.04 隶属专栏:linux之旅 本篇简介: 主线带你用ubuntu版系统步步分析实现基础版本的shell;比如支持重定向操作࿰…...
模块化设计割草机器人系统研究与实现(系统架构师论文)
摘要: 割草机器人项目旨在实现自主草坪修剪,以提高园艺工作的效率。本文以具体项目为背景,介绍系统架构师在项目开发过程中的架构设计策略、关键技术应用、问题解决方案和优化措施。首先,本文分析割草机器人项目的总体架构需求&a…...
javascript(前端)作为客户端端通过grpc与cpp(服务端)交互
参考文章 https://blog.csdn.net/pathfinder1987/article/details/129188540 https://blog.csdn.net/qq_45634989/article/details/128151766 前言 临时让我写前端, 一些配置不太懂, 可能文章有多余的步骤但是好歹能跑起来吧 你需要提前准备 公司有自带的这些, 但是版本大都…...
股市复盘笔记
复盘是股市投资中非常重要的一个环节,它指的是投资者在股市收盘后,对当天的市场走势、个股表现以及自己的交易行为进行回顾和总结,以便更好地指导未来的投资决策。以下是对复盘的详细解释: 一、复盘的目的 总结市场走势ÿ…...
【SARL】单智能体强化学习(Single-Agent Reinforcement Learning)《纲要》
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
Linux 权限管理:用户分类、权限解读与常见问题剖析
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 💯L…...
Windows通过指令查看已安装的驱动
Windows通过指令查看已安装的驱动 在 Windows 操作系统中,有几种命令可以用来查看已安装的驱动程序。以下是常见的几种方法: 1. 使用 pnputil 查看已安装驱动程序 pnputil 是一个 Windows 内置工具,可以列出所有已安装的驱动程序包。 命令…...
Springboot(五十一)SpringBoot3整合Sentinel-nacos持久化策略
上文中我记录了在Springboot项目中链接sentinel-dashboard使用限流规则的全过程。 但是呢,有一个小小的问题,我重启了一下我本地的sentinel-dashboard服务,然后,我之前创建的所有的流控规则都没了…… 这……好像有点不合理啊,咱就不能找地儿存储一下?你这一重启就没了,…...