使用java连接Libvirtd

基于springboot web

一、依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.libvirt</groupId><artifactId>libvirt</artifactId><version>0.5.2</version></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.13.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.37</version></dependency>

二、代码

package com.libvirtddemo.controller;import com.alibaba.fastjson2.JSON;  // 引入fastjson库,用于将对象转换为JSON字符串
import lombok.extern.slf4j.Slf4j;  // 引入Slf4j注解,方便日志记录
import org.libvirt.Connect;  // 引入libvirt库的Connect类
import org.libvirt.Library;  // 引入libvirt库的Library类
import org.libvirt.LibvirtException;  // 引入libvirt库的LibvirtException类
import org.springframework.web.bind.annotation.GetMapping;  // 引入Spring的GetMapping注解
import org.springframework.web.bind.annotation.RestController;  // 引入Spring的RestController注解import java.util.HashMap;  // 引入HashMap类
import java.util.Map;  // 引入Map类
import java.util.Objects;  // 引入Objects类@RestController  // 声明该类是一个RESTful API控制器
@Slf4j  // 添加Slf4j注解,方便日志记录
public class LibvirtdController {static private Map<String, Connect> s_connections = new HashMap<String, Connect>();  // 定义一个静态Map对象,用于存储连接对象@GetMapping("/connection")  // 处理GET请求的映射,路径为"/connection"public String connectLibvirt(String hypervisorURI) throws LibvirtException {log.info("hypervisorURI: " + hypervisorURI);  // 记录日志,输出hypervisorURI的值if (hypervisorURI == null || Objects.equals(hypervisorURI, "")) {  // 判断hypervisorURI是否为空或者为空字符串hypervisorURI = "qemu:///system";  // 如果为空,设置默认值为"qemu:///system"}log.info("Looking for libvirtd connection at: " + hypervisorURI);  // 记录日志,输出连接的libvirtd的URIConnect conn = s_connections.get(hypervisorURI);  // 从连接Map中获取指定URI的连接对象if (conn == null) {  // 如果连接对象为空log.info("No existing libvirtd connection found. Opening a new one");  // 记录日志,表示没有已经存在的连接对象conn = new Connect(hypervisorURI, false);  // 创建新的连接对象Library.initEventLoop();  // 初始化事件循环log.info("Successfully connected to libvirt at: " + hypervisorURI);  // 记录日志,表示成功连接到libvirtds_connections.put(hypervisorURI, conn);  // 将连接对象加入到连接Map中} else {  // 如果连接对象不为空try {long version = conn.getVersion();  // 获取libvirtd的版本号log.info("version:{}", version);  // 记录日志,输出版本号} catch (LibvirtException e) {log.error("Connection with libvirtd is broken: " + e.getMessage());  // 记录错误日志,表示与libvirtd的连接中断log.info("Opening a new libvirtd connection to: " + hypervisorURI);  // 记录日志,表示打开一个新的libvirtd连接conn = new Connect(hypervisorURI, false);  // 创建新的连接对象s_connections.put(hypervisorURI, conn);  // 将连接对象加入到连接Map中}}log.info("conn:{}", JSON.toJSONString(conn));  // 记录日志,输出连接对象的JSON字符串形式return JSON.toJSONString(conn);  // 将连接对象转换为JSON字符串并返回}
}

URL说明

qemu:///... QEMU and KVM URIs¶
To use QEMU support in libvirt you must be running the libvirtd daemon (named libvirt_qemud in releases prior to 0.3.0). The purpose of this daemon is to manage qemu instances.The libvirtd daemon should be started by the init scripts when the machine boots. It should appear as a process libvirtd --daemon running as root in the background and will handle qemu instances on behalf of all users of the machine (among other things).So to connect to the daemon, one of two different URIs is used:qemu:///system connects to a system mode daemon.qemu:///session connects to a session mode daemon.(If you do libvirtd --help, the daemon will print out the paths of the Unix domain socket(s) that it listens on in the various different modes).KVM URIs are identical. You select between qemu, qemu accelerated and KVM guests in the guest XML as described here.

三、测试

curl http://localhost:8080/connection?hypervisorURI=qemu%3A%2F%2F%2Fsystem
curl http://localhost:8080/connection

四、官网案例

https://java.libvirt.org/
import org.libvirt.*;
public class minitest {public static void main(String[] args) {Connect conn=null;try{conn = new Connect("test:///default", true);} catch (LibvirtException e) {System.out.println("exception caught:"+e);System.out.println(e.getError());}try{Domain testDomain=conn.domainLookupByName("test");System.out.println("Domain:" + testDomain.getName() + " id " +testDomain.getID() + " running " +testDomain.getOSType());} catch (LibvirtException e) {System.out.println("exception caught:"+e);System.out.println(e.getError());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131970.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用c语言编写出三底模型

以下是一个用C语言实现三底模型的示例代码。这个程序通过循环遍历输入的股票数据&#xff0c;判断是否出现三底形态&#xff0c;如果是&#xff0c;则输出买入信号&#xff0c;否则输出卖出信号。 c语言 #include <stdio.h> #include <stdlib.h> // 判断是否出现…

Java项目---图片服务器

图片服务器--->服务器&#xff08;图床&#xff09; 核心功能&#xff1a;上传图片、展示图片等 比如&#xff1a;编写博客时我们会插入图片&#xff0c;本质上是往文章中放了一个链接&#xff08;URL&#xff09;&#xff0c;这个URL资源在另外一个服务器上。 核心知识点…

FPGA 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存HDMI输出 5、vivado工程详解PL端FPGA硬件设…

无涯教程-JavaScript - INFO函数

描述 INFO函数返回有关当前操作环境的信息。 语法 INFO (type_text) 争论 Argument描述Required/OptionalType_text 指定要返回的信息类型的文本。 下表给出了Type_text的值和相应的返回信息。 Required Type_text 返回的信息"目录" 当前目录或文件夹的路径。&qu…

【Proteus仿真】【STM32单片机】四驱寻迹避障小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后&#xff0c;LCD1602显示红外、超声波检测状态和距离、小车运行状态。可通过K1键可手动切换模式&#xff0c;寻迹、避障、蓝牙遥控&#xff1b;也可通过蓝牙发送指令切换模式&#xff1b; 当处…

系统架构设计之道,论如何构建一个资金账户系统

&#x1f449;导读 资金账户是互联网和金融业务中非常常见的系统&#xff0c;尤其是在电商、支付等业务中必不可少。资金账户系统本身其核心模块的整体架构往往并不复杂&#xff0c;但其对于资金安全和可用性的要求非常高&#xff0c;导致建设好一个资金账户系统并不容易。本文…

【Spring Boot】有这一文就够了

作者简介 前言 作者之前写过一个Spring Boot的系列&#xff0c;包含自动装配原理、MVC、安全、监控、集成数据库、集成Redis、日志、定时任务、异步任务等内容&#xff0c;本文将会一文拉通来总结这所有内容&#xff0c;不骗人&#xff0c;一文快速入门Spring Boot。 专栏地址…

MySQL安装validate_password_policy插件

功能介绍 validate_password_policy 是插件用于验证密码强度的策略。该参数可以设定三种级别&#xff1a;0代表低&#xff0c;1代表中&#xff0c;2代表高。 validate_password_policy 主要影响密码的强度检查级别&#xff1a; 0/LOW&#xff1a;只检查密码长度。 1/MEDIUM&am…

YashanDB:潜心实干,数据库核心技术突破没有捷径可走

都说数据库是三大基础软件中的一块硬骨头&#xff0c;技术门槛高、研发周期长、工程要求高&#xff0c;市场长期被几大巨头所把持。 因此&#xff0c;实现突破一直是中国数据库产业的夙愿。自上个世纪80年代起&#xff0c;中国数据库产业走过艰辛坎坷的四十余载&#xff0c;终…

vue组件库开发,webpack打包,发布npm

做一个像elment-ui一样的vue组件库 那多好啊&#xff01;这是我前几年就想做的 但webpack真的太难用&#xff0c;也许是我功力不够 今天看到一个视频&#xff0c;早上6-13点&#xff0c;终于实现了&#xff0c;呜呜 感谢视频的分享-来龙去脉-大家可以看这个视频&#xff1a;htt…

美东一公司的郁闷面试题

说是题目可以用不同的语言&#xff0c;但是貌似 Java 是多线程的&#xff0c;用 Java 写肯定容易不少。 但&#xff0c;觉得这个题目用多线程简直是有点脱了裤子放屁。 完整题目内容 题目的网站内容如下&#xff1a; Please complete the following challenge in one of th…

【自动驾驶决策规划】POMDP之Introduction

文章目录 前言Markov PropertyMarkov ChainHidden Markov ModelMarkov Decision ProcessPartially Observable Markov Decision ProcessBackground on Solving POMDPsPOMDP Value Iteration Example 推荐阅读与参考 前言 本文是我学习POMDP相关的笔记&#xff0c;由于个人能力…

2024字节跳动校招面试真题汇总及其解答(一)

1. 【算法题】重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:hea…

Kafka3.0.0版本——消费者(自动提交 offset)

目录 一、自动提交offset的相关参数二、消费者&#xff08;自动提交 offset&#xff09;代码示例 一、自动提交offset的相关参数 官网文档 参数解释 参数描述enable.auto.commi默认值为 true&#xff0c;消费者会自动周期性地向服务器提交偏移量。auto.commit.interval.ms如果…

基于视觉重定位的室内AR导航APP的大创项目思路(2):改进的项目思路——建图和定位分离

文章目录 一、建图二、定位首先是第一种方法&#xff1a;几何方法其次是第二种方法&#xff1a;图像检索方法最后是第三种方法&#xff1a;深度学习方法 前情提要&#xff1a; 是第一次做项目的小白&#xff0c;文章内的资料介绍如有错误&#xff0c;请多包含&#xff01; 一、…

华为云云耀云服务器L实例评测|初始化centos镜像到安装nginx部署前端vue、react项目

文章目录 ⭐前言⭐购买服务器&#x1f496; 选择centos镜像 ⭐在控制台初始化centos镜像&#x1f496;配置登录密码 ⭐在webstorm ssh连接 服务器⭐安装nginx&#x1f496; wget 下载nginx&#x1f496; 解压运行 ⭐添加安全组⭐nginx 配置⭐部署vue&#x1f496; 使用默认的ng…

【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传

目录 一、0x00 前言 二、基础知识 1、Flash 2、crossdomain.xml文件 3、crossdomain.xml格式 4、crossdomain.xml相关参数 三、漏洞利用 1、方法&#xff1a; 2、上传漏洞配置文件 一、0x00 前言 在很多地方都会见查是否跨域 比如某些特定的步骤、CSRF、flash跨域劫…

SimpleCG程序交互操作

前言 之前所有示例程序都是属于展示型的&#xff0c;只是作为展示板输出使用&#xff0c;不涉及键盘和鼠标的输入交互&#xff0c;下面我们开始接触具有交互功能的程序。 没有交互功能的程序可以满足一定需求,不过大部分的程序是不能脱离交互功能的。程序依据使用者的操作进行相…

PbootCMS在搭建网站

1、打开网站 https://www.pbootcms.com/ 2、点击 “本站” 下载最新的网站代码 3、在本地laragon/www下创建目录&#xff08;hejuwuye&#xff09;&#xff0c;并将代码放进去 4、创建本地数据库&#xff0c;数据库名称为&#xff1a; hejuwuye&#xff0c;然后将static/bac…

第三方软件测试机构有哪些测试服务软件测试报告收费标准是怎样的?

软件验收机构 一、什么是第三方软件测试机构? 第三方软件测试机构是区别于软件开发公司以及软件需求方的第三方机构&#xff0c;软件企业将软件测试外包给第三方软件测试机构已经成为了行业发展趋势。既省心省力&#xff0c;又降低企业成本&#xff0c;得出的软件测试结果以…