zoukankan      html  css  js  c++  java
  • libvirt 启用TCP远程连接,windows平台java调用示例

    1、开启TCP连接

    编辑 /etc/libvirt/libvirtd.conf,去掉 listen_tls = 0listen_tcp = 1tcp_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 版本不一样也有关系吧

  • 相关阅读:
    进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈
    HTTPS详细讲解一篇就够了
    MySQL存储过程
    Spring注入全局的HttpServletRequest
    Java进阶必备
    Java8新特性
    java.time包常用类API学习记录
    Maven常用插件
    maven-dependency-versions-check-plugin, Maven 插件查找依赖版本冲突
    Jackson自定义注解
  • 原文地址:https://www.cnblogs.com/nihaorz/p/15005820.html
Copyright © 2011-2022 走看看