1、开启TCP连接
编辑 /etc/libvirt/libvirtd.conf,去掉 listen_tls = 0、listen_tcp = 1、tcp_port = "16509" 三行前面的注释
编辑 /etc/sysconfig/libvirtd,去掉 LIBVIRTD_ARGS="--listen" 前面的注释
执行服务重启命令:
systemctl restart libvirtd
2、安装 windows 平台下的 Libvirt 客户端,下载地址如下:
https://libvirt.org/sources/win32_experimental/Libvirt-0.8.8-0.exe
3、新建 maven 项目进行 java sdk 调用(必须装32位的jdk,64位的会有问题)
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <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>org.example</groupId> <artifactId>libvirt-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.8.0</version> </dependency> <dependency> <groupId>org.libvirt</groupId> <artifactId>libvirt</artifactId> <version>0.5.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project>
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="WARN" monitorInterval="30"> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/> </console> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <root level="all"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
LibvirtTest:(注释掉的都是运行时会报错的,坑比较多)
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Test; import org.libvirt.Connect; import org.libvirt.LibvirtException; public class LibvirtTest { private static final Logger logger = LogManager.getLogger(LibvirtTest.class); @Test public void test() throws LibvirtException { Connect connect = new Connect("qemu+tcp://172.16.20.17:16509/system", true); // logger.info("连接到的宿主机的主机名:{}", connect.getHostName()); logger.info("JNI连接的libvirt库版本号:{}", connect.getLibVirVersion()); // logger.info("连接的URI:{}", connect.getURI()); logger.info("连接到的宿主机的剩余内存:{}", connect.getFreeMemory()); logger.info("连接到的宿主机的最大CPU:{}", connect.getMaxVcpus(null)); logger.info("hypervisor的名称:{}", connect.getType()); int[] ids = connect.listDomains(); for (int id : ids) { System.out.println(connect.domainLookupByID(id).getName()); } // String[] domains = connect.listDefinedDomains(); // for (String domain : domains) { // System.out.println(domain); // } } }
后续
在 CentOS7 上正常使用64位 jdk,安装 libvirt,执行上面的函数注释是不会报错的,可能 libvirt 版本不一样也有关系吧