百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

【Java】Vert.x 学习笔记(1)

liuian 2025-02-09 13:15 57 浏览

今天分享自己在 2022 年左右初学 Vert.x 的一些经验和看法。里面有不足或想得不周到的地方,还请各位看官多多包涵。为了更贴合实际,本次分享将结合实例进行叙述。实例将提供一个简单的 RESTful 接口用以收集埋点数据,希望能帮助各位理解。

1. 前言

本人学习Vert.x的初衷是为了找一个Springboot的平替方案。

Spring系列不能说不好,只是这么多年看着它从一个打败EJB的轻量级框架逐渐“发胖”,只感叹“屠龙少年终成恶龙”这并不是我等希望看到的。当然了,Spring团队也意识到这个问题了,后面来了个Springboot,但味儿终究还是变了。

虽然现公司还是用的Springboot,但随着业务扩张带来的“微服务”治理问题大大提升了投入成本,令我一度觉得回归水平扩展的SOA架构也不失为一个较理想的解决方案。“穷”则变变则通,本着“要比Springboot更轻、更快,占用资源更少”这个想法去选型并最终就选择了Vert.x(听上去不太靠谱,但是一开始没有什么方向的时候也只能先这样做了)。

至于Vert.x是什么?这个我就不再多说了,网上的各路大神和官网(
https://vertx-china.github.io/)都写得很清楚了。它给我的感受是一开始很惊艳(无论是启动速度上还是性能上)。但用着用着又觉得有点晦涩,毕竟十几年的Spring人很难摆脱Spring的编程风格。而且对于第三方的支持也比Spring少,不支持的第三方对接时还需额外开发。直到现在4.x版本推出后,就觉得很多轻量化的应用直接用Vert.x做,得益于体积小、资源占用少、启动快等优点,Vert.x可以为IoT设备加入一些边缘扩展,对于部分定制化IoT开发非常有帮助。

但话又说回来,企业想使用Vert.x全面替代Springboot也是不太现实的(除非公司的技术选型一开始就是Vert.x,而且招来的开发人员都是响应式开发出身),毕竟在以市场为主导的国内生态,Springboot的地位还是不可撼动的。与其使用较为小众的技术,还不如能快速开发,且社区强大的Springboot回报率更高吧。

2. 结构说明

言归正传,本次是“自我”假设以收集埋点数据为基础需求搭建的,其实就是公开一个对外RESTful接口,让外部调用一下,项目结构如下:

.
|-- pom.xml    # Maven的pom.xml文件
|-- src
|   |-- main
|   |   |-- java
|   |   |   `-- io
|   |   |       `-- kida
|   |   |           |-- App.java  # 启动类
|   |   |           |-- components
|   |   |           |   |-- callback
|   |   |           |   |   `-- BootstrapCallback.java  # 启动回调
|   |   |           |   |-- configs
|   |   |           |   |   |-- BootstrapConfig.java    # 启动配置
|   |   |           |   |   |-- RouterConfig.java        # 路由配置
|   |   |           |   |   `-- YamlConfig.java          # yaml文件工具配置
|   |   |           |   |-- constants
|   |   |           |   |   `-- CommonConstants.java    # 系统常量
|   |   |           |   |-- routers
|   |   |           |   |   `-- RouterSet.java          # 路由通用接口
|   |   |           |   `-- utils
|   |   |           |       |-- db
|   |   |           |       |   `-- JOOQUtil.java        # JOOQ工具
|   |   |           |       |-- http
|   |   |           |       |   |-- IPUtil.java          # IP工具
|   |   |           |       |   `-- RespMsg.java        # 接口返回对象
|   |   |           |       |-- redis      
|   |   |           |       |   `-- RedisUtil.java      # redis客户端
|   |   |           |       |-- ref
|   |   |           |       |   `-- ReflectUtil.java    # ASM映射工具
|   |   |           |       `-- yaml
|   |   |           |           |-- YamlUtil.java        # yaml工具类
|   |   |           |           |-- annotations
|   |   |           |           |   `-- PropLoader.java  # yaml配置注解
|   |   |           |           `-- constants
|   |   |           |               `-- YamlConstants.java  # yaml常量类
|   |   |           |-- model
|   |   |           |   |-- DefaultCatalog.java
|   |   |           |   |-- Indexes.java
|   |   |           |   |-- Keys.java
|   |   |           |   |-- Tables.java
|   |   |           |   |-- Tools.java
|   |   |           |   `-- tables
|   |   |           |       |-- SysUserBuried.java
|   |   |           |       |-- converters
|   |   |           |       |   |-- Bindings.java
|   |   |           |       |   `-- Converters.java
|   |   |           |       |-- daos
|   |   |           |       |   `-- SysUserBuriedDao.java
|   |   |           |       |-- pojos
|   |   |           |       |   `-- SysUserBuried.java
|   |   |           |       `-- records
|   |   |           |           `-- SysUserBuriedRecord.java
|   |   |           |-- router
|   |   |           |   `-- SysUserBuriedRouter.java
|   |   |           `-- service
|   |   |               `-- SysUserBuriedService.java
|   |   `-- resources
|   |       |-- configs                                # 配置文件夹
|   |       |   |-- bootstrap.yml                      # 启动配置
|   |       |   `-- master                            # master分支配置(特意做成类似Springboot的配置模式)
|   |       |       |-- application-datasource.yml    # 数据库配置
|   |       |       `-- application-redis.yml          # redis配置
|   |       |-- db                                    # 数据库脚本文件
|   |       |   `-- migrations
|   |       |       `-- V1.0.00001__v20230413.11.23_CREATE_SYS_USER_BURIED.sql
|   |       `-- log4j2.xml                            # log4j配置文件
|   `-- test
|       |-- java
|       |   `-- io
|       |       `-- kida
|       |           `-- SysUserBuriedTest.java        # 单元测试类
|       `-- resources
`-- target

项目整体结构如上图所示,在结构上与Springboot极为相似(没办法用了这么多年了,太过于顺手)。Java代码的分层是在io.kida根目录下有一个名为App.java的启动类,分层结构也是io.kida.router独立一层用于真实路由访问也就是Springboot的RestController,io.kida.service独立一层用于逻辑处理。至于io.kida.model是JOOQ组件自己生成的,它将dao、pojo等内容都生成在里面了,不然的话我又会io.kida.dao一层的了...ε=(′ο`*)))唉。其余的与业务无关的内容都放到io.kida.components一层。

在配置文件方面受Springboot设计影响较深。所有的配置文件都将放在
src/main/resources/configs目录底下。其中bootstrap.yml文件为启动配置基础文件,如下图:

server: # 服务器
   name: buried_vtx_demo # 当前服务名称
   active: master
   port: <> # 开放端口
   context: vtx # 上下文
   timeout: 120 # eventbus超时时间
   cron: 30000
   http:
      header: # header获取到的变量
      - x-requested-with
      - Access-Control-Allow-Origin
      - Access-Control-Allow-Header
      - origin
      - Content-Type
      - accept
      - phSessionToken
   event-bus:
      timeout: 10000 # 毫秒
thread: # 线程配置
   deploy:
      init: 16 # 初始化部署线程数
      max-size: 64 # 最大部署线程数
      pool-name: vtx-thread-pool # 线程池名称
   worker: 64 # 程序工作线程数
   init-pool-size: 32 # 阻塞线程数量,默认20
   eventloop-pool-size: 128 # Event Loop线程的数量

里面包括server的名称,需要读取的配置文件夹名称,服务端口......至于各个分支不同的配置可以单独提取出来,放到各个以分支命名的文件夹下。如下图:

datasource: # 数据库配置
   host: <> #数据库地址
   port: <> #数据库端口
   database-name: tools #操作库名称
   use-unicode: true #是否使用unicode编码
   character-encoding: utf8 #文字编码
   ssl-enable: false # 是否使用安全连接
   server-timezone: UTC # 指定时区
   url-head: 'jdbc:mysql:' #jdbc连接头
   driver-class-name: com.mysql.cj.jdbc.Driver #jdbc驱动类型
   jooq-name: org.jooq.meta.mysql.MySQLDatabase #数据库方言
   package-path: io.kida.model # jooq映射路径
   username: <> #数据库登录用户名
   password: <> # 数据库登录密码
   hikari: # hikariCP线程池处理参数(略)
      is-auto-commit: true
      allow-pool-suspension: true
      connection-test-query: SELECT 1
      pool-name: vtx_hikari_pool
      minimum-idle: 20
      maximum-pool-size: 200
      idle-timeout: 180000
      connection-timeout: 60000
      cache-prep-stmts: true
      prep-stmt-cache-size: 128
      prep-stmt-cache-sql-limit: 256
      use-server-prep-stmts: true
      use-local-session-state: true
      use-local-transaction-state: true
      rewrite-batched-statements: true
      cache-result-set-metadata: true
      cache-server-configuration: true
      elide-set-auto-commits: true
      maintain-time-stats: false
      allow-public-key-retrieval: true
redis: # redis配置
   max-pool-size: 6000 # 线程池最大线程数
   max-pool-waiting: -1 # 最大线程池等待时间
   connection-string: redis://<>:<>/<> # redis连接地址
   pool-recycle-timeout: 5000 # 线程池回收超时
   batch-num: 5000 # 批次处理条数
   max-waiting-handlers: 7000 # 等待操作

样例里面的数据库配置和redis配置如上图所示。

数据库脚本方面,由于之前是使用了Flyway做数据库版本控制的,但后来因为某些原因没用了。虽然组件没用了,但是脚本存放路径还是保留了
src/main/resources/db/migrations。

最后还有log4j2的配置,这里请不要纠结为什么要用log4j,因为当初在学习的时候log4j还没有出事儿呢...只是个Demo还是保留它吧。



  
    info
    <>
    buried_vtx_demo
  
  
    
      
      
    
    
      
      
        
      
      
    
  
  
    
      
      
    
  

整套项目都是Maven项目,怎么能够不提一下pom.xml呢?


  4.0.0
  io.kida
  buried-vtx-demo
  1.0.0
  buried-vtx-demo
  数据埋点vtx演示

  
    UTF-8
    ${encoding.code}
    
    ${encoding.code}
    

    3.9.0
    4.13
    3.13.2
    5.1.1
    8.0.19
    1.1.3
    2.13.2
    3.4.2
    4.7.0
    1.09
    3.4.5

    8
    2.4.2
    3.3

    io.kida.App
  


  
    
    
      io.vertx
      vertx-core
      ${vertx.version}
    
    
    
      io.vertx
      vertx-web
      ${vertx.version}
    
    
    
      io.vertx
      vertx-unit
      ${vertx.version}
      test
    
    
      junit
      junit
      ${junit.version}
      test
    
    
    
      io.vertx
      vertx-redis-client
      ${vertx.version}
    
    
    
      io.vertx
      vertx-jdbc-client
      ${vertx.version}
    
    
    
      com.zaxxer
      HikariCP
      ${hikari.version}
    
    
    
      io.vertx
      vertx-config-yaml
      ${vertx.version}
    
    
      io.vertx
      vertx-config
      ${vertx.version}
    
    
    
      org.apache.logging.log4j
      log4j-api
      ${log4j2.version}
    
    
      org.apache.logging.log4j
      log4j-core
      ${log4j2.version}
    
    
      org.apache.logging.log4j
      log4j-slf4j-impl
      ${log4j2.version}
    
    
      org.apache.logging.log4j
      log4j-jcl
      ${log4j2.version}
    
    
      org.apache.logging.log4j
      log4j-jul
      ${log4j2.version}
    
    
      com.lmax
      disruptor
      ${disruptor.version}
    
    
    
      org.jooq
      jooq
      ${jooq.version}
    
    
      io.github.jklingsporn
      vertx-jooq-completablefuture-jdbc
      ${jooq.rx.version}
    
    
    
      mysql
      mysql-connector-java
      ${mysql.version}
    
    
    
      com.englishtown.vertx
      vertx-jersey-jackson
      ${jackson.version}
    
    
    
      com.esotericsoftware.reflectasm
      reflectasm
      ${reflectasm.version}
    
  


  
    
      
      
        maven-compiler-plugin
        ${compiler.version}
        
          ${jdk.version}
          ${jdk.version}
        
      


      
      
        it.ozimov
        yaml-properties-maven-plugin
        ${yaml.version}
        
          
            initialize
            
              read-project-properties
            
            
              
                src/main/resources/configs/master/application-datasource.yml
              
            
          
        
      


      
      
        org.jooq
        jooq-codegen-maven
        ${jooq.version}
        
          
            
              generate
            
          
        
        
          
            io.github.jklingsporn
            vertx-jooq-generate
            ${jooq.rx.version}
          
        
        
          
            ${datasource.driver-class-name}
            ${datasource.url-head}//${datasource.host}:${datasource.port}/${datasource.database-name}?useUnicode=${datasource.use-unicode}%26characterEncoding=${datasource.character-encoding}%26useSSL=${datasource.ssl-enable}%26serverTimezone=${datasource.server-timezone}
            ${datasource.username}
            ${datasource.password}
          
          
            io.github.jklingsporn.vertx.jooq.generate.completablefuture.CompletableFutureJDBCVertxGenerator
            
            
              ${datasource.jooq-name}
              .*
              flyway_schema_history
              ${datasource.database-name}
            
            
              true
              true
              true
              true
            
            
              ${datasource.package-path}
              src/main/java
            
            
              io.github.jklingsporn.vertx.jooq.generate.VertxGeneratorStrategy
              
            
          
        
      


      
      
        org.apache.maven.plugins
        maven-shade-plugin
        ${maven.shade.version}
        
          
            package
            
              shade
            
            
              
                
                  
                    ${main.class}
                  
                
                
                  META-INF/services/io.vertx.core.spi.VerticleFactory
                  
                
              
              ${project.build.directory}/${project.artifactId}-${project.version}-prod.jar
              
            
          
        
      
    
  

pom文件中用的三个插件需要提一下的,他们分别是
yaml-properties-maven-plugin、jooq-codegen-maven和maven-shade-plugin。

先说
yaml-properties-maven-plugin,这个插件能让pom中的变量读取配置文件配置,如下图:


  it.ozimov
  yaml-properties-maven-plugin
  ${yaml.version}
  
    
      initialize
      
        read-project-properties
      
      
        
          src/main/resources/configs/master/application-datasource.yml
        
      
    
  

如上图所示,execution -> goal中配置了read-project-properties(读取项目配置)参数,在下方就能够通过configuration -> files -> file去指定被读取的文件,这里是“
src/main/resources/configs/master/application-datasource.yml”,至于有小伙伴可能会问,这里能不能做成动态的呢?毕竟启动环境不一样路径也不一样。可以的,但是就需要借助一下其他手段了,方法多的是。

配置了
yaml-properties-maven-plugin之后,我们怎样将配置文件内容读取到pom里面呢?这时,我们就可以看看jooq-codegen-maven的展示



  org.jooq
  jooq
  ${jooq.version}


  io.github.jklingsporn
  vertx-jooq-completablefuture-jdbc
  ${jooq.rx.version}



......




  org.jooq
  jooq-codegen-maven
  ${jooq.version}
  
    
      
        generate
      
    
  
  
    
      io.github.jklingsporn
      vertx-jooq-generate
      ${jooq.rx.version}
    
  
  
    
      ${datasource.driver-class-name}
      ${datasource.url-head}//${datasource.host}:${datasource.port}/${datasource.database-name}?useUnicode=${datasource.use-unicode}%26characterEncoding=${datasource.character-encoding}%26useSSL=${datasource.ssl-enable}%26serverTimezone=${datasource.server-timezone}
      ${datasource.username}
      ${datasource.password}
    
    
      io.github.jklingsporn.vertx.jooq.generate.completablefuture.CompletableFutureJDBCVertxGenerator
      
      
        ${datasource.jooq-name}
        .*
        flyway_schema_history
        ${datasource.database-name}
      
      
        true
        true
        true
        true
      
      
        ${datasource.package-path}
        src/main/java
      
      
        io.github.jklingsporn.vertx.jooq.generate.VertxGeneratorStrategy
        
      
    
  

JOOQ是一个比较优秀的ORM组件,它也能够提供代码生成功能,如上图所示。executions -> execution -> goals -> goal配置成generate表示用于生成代码,在这个基础上加入vertx-jooq-generate依赖。在下方配置jdbc信息。


  
    ${datasource.driver-class-name}
    ${datasource.url-head}//${datasource.host}:${datasource.port}/${datasource.database-name}?useUnicode=${datasource.use-unicode}%26characterEncoding=${datasource.character-encoding}%26useSSL=${datasource.ssl-enable}%26serverTimezone=${datasource.server-timezone}
    ${datasource.username}
    ${datasource.password}
  
  
    io.github.jklingsporn.vertx.jooq.generate.completablefuture.CompletableFutureJDBCVertxGenerator
    
    
      ${datasource.jooq-name}
      .*
      flyway_schema_history
      ${datasource.database-name}
    
    
      true
      true
      true
      true
    
    
      ${datasource.package-path}
      src/main/java
    
    
      io.github.jklingsporn.vertx.jooq.generate.VertxGeneratorStrategy
      
    
  

在这里面的${
datasource.driver-class-name}就是读取配置文件的内容,是不是非常方便呢。在下面只需要配置生成内容和目标路径即可完成自动代码生成配置。如下图;


  true
  true
  true
  true


  ${datasource.package-path}
  src/main/java

最后,我们再说一下Vert.x的打包,这里我选用的是maven-shade-plugin插件进行maven打包。通过transformers -> transformer -> manifestEntries -> Main-Class指定启动类,通过outputFile指定宝输出目录和命名。至于
META-INF/services/io.vertx.core.spi.VerticleFactory是固定的配置,我这边是没有改的。

3. 使用组件清单

通过上面对pom.xml的介绍大伙儿多多少少都能够看到使用了那些开源组件了

组件名称

版本

作用

Vert.x

3.9.0

Vert.x是一个基于JVM的响应式应用程序框架,它允许您轻松地编写高性能、高可扩展性和易于维护的应用程序。Vert.x的核心是一个事件循环,它提供了异步I/O、事件驱动和非阻塞的API,可以用于构建各种类型的应用程序,包括Web应用程序、RESTful服务、消息系统、流处理和微服务等。它还提供了多种编程语言的支持,包括Java、Kotlin、Scala、Groovy和JavaScript等。Vert.x的目标是为开发者提供一个易于使用、高性能、灵活且可扩展的框架,使开发者能够快速地构建现代化的应用程序。

JUnit

4.13

JUnit是一个用于Java编程语言的测试框架,它提供了注解和断言等工具,用于编写和运行单元测试。JUnit是由Erich Gamma和Kent Beck创建的,并在Apache许可证下发布。JUnit主要用于单元测试,它可以自动化地执行测试,并将测试结果以报告的形式呈现。JUnit可以帮助开发人员提高代码质量、减少错误和缺陷,并简化代码的维护和重构。除了Java之外,JUnit还可以用于其他编程语言,如C#和Python等。

JOOQ

3.13.2

(由于我们用的是MySQL数据库,因此用免费版就可以了)

JOOQ是一种Java对象关系映射(ORM)框架,它允许使用Java编程语言进行类型安全的SQL查询。JOOQ(Java对象查询语言)提供了一种类型安全的方式来编写SQL查询,它不仅提供了ORM框架的一些好处,如编写简单、易于维护的代码,而且还提供了一些更强大的功能,如支持复杂的SQL查询、查询结果的类型安全和流式查询等。JOOQ使用Java代码表示SQL查询,这样可以在编译时就检查语法错误,而不是在运行时出现错误。此外,JOOQ还提供了一些工具和API来支持数据库架构演化和版本控制,使得应用程序可以更轻松地适应数据库结构的变化。

MySQL

8.0.19

使用对应的MySQL Community Server版本即可

Yaml-Properties-Maven-Plugin

1.1.3

这是一个Maven插件,用于将YAML文件转换为Java Properties文件。它可以方便地将YAML格式的配置文件转换为Java Properties格式,以便在Java应用程序中使用。它支持将一个或多个YAML文件转换为一个或多个Properties文件,并且可以通过Maven命令行或在Maven项目的pom.xml文件中进行配置。这个插件通常被用于将YAML格式的配置文件转换为Spring Boot应用程序所需的application.properties文件。

Log4j2

2.13.2

(实际使用时可能要考虑漏洞问题)

Log4j2是一个开源的Java日志框架,是Log4j框架的升级版。它提供了更好的性能和灵活性,并且支持更多的应用场景。

Disruptor

3.4.2

Disruptor是一个高性能的无锁并发框架,主要用于解决高并发、低延迟的业务场景。

Jackson

4.7.0

Jackson是一个用于Java平台的流行JSON解析器和生成器库。它提供了一组API来读取和写入JSON格式数据,包括支持JSON数据和Java对象之间的转换。Jackson可以通过多种方式使用,包括注解和XML配置。它是一个高性能的库,可在大规模应用程序中使用。Jackson还提供了对XML和YAML格式的支持。

ReflectASM

1.09

ReflectASM是一个基于ASM库的Java库,用于快速反射Java对象。它提供了一个高性能的替代Java反射的方案。相比Java反射,ReflectASM使用ASM在编译期生成的字节码来访问Java对象的方法和字段,从而提高了性能。使用ReflectASM,可以显着提高访问Java对象的性能,特别是在需要反射访问大量对象的情况下。ReflectASM还支持访问非公共的Java对象方法和字段。

HikariCP

3.4.5

HikariCP是一个开源的高性能轻量级连接池,适用于Java应用程序,它提供了比其他连接池更快速和更可靠的数据库连接管理。HikariCP的设计目标是最小化数据库连接等待时间,最大化应用程序吞吐量。它是目前市场上使用最广泛的连接池之一,因为它比其他连接池拥有更好的性能和更低的资源消耗。

相关推荐

破解qq空间(破解qq空间访问权限的软件)

空间设置了访问权限,所以不是好友,或是不知道问题密码的人,是进不去的!没有可以强行进入的方法,因为涉及他人隐私问题,除非本人对你开放。一般限制访问QQ空间访问权限会有三种情况:1、仅自己。2、QQ...

手机怎么把qq空间关了(手机qq空间怎么关掉)
  • 手机怎么把qq空间关了(手机qq空间怎么关掉)
  • 手机怎么把qq空间关了(手机qq空间怎么关掉)
  • 手机怎么把qq空间关了(手机qq空间怎么关掉)
  • 手机怎么把qq空间关了(手机qq空间怎么关掉)
联想win7原版(联想正版win7原版)

要还原联想笔记本自带的Win7系统,首先需要进入电脑的BIOS界面,将启动项设置为光驱或U盘。然后将联想笔记本自带的恢复盘或安装盘插入电脑,并重启电脑。接着按照提示进行操作,选择还原系统选项,等待系统...

bonjour软件有用吗(bonbon是啥软件)

1.bonjour软件是苹果公司在其开发的操作系统MacOSX10.2版本之后引入的服务器搜索协议所使用的一个商标名。2.安装了类似的itunes的软件以后,电脑上就会出现Bonjour软件...

笔记本电脑开机蓝屏无字(笔记本屏幕蓝屏什么字也没有)

初步怀疑是电脑温度过高导致的问题。出现蓝屏毛病的原因很多:1、电脑蓝屏是由于病毒破坏系统文件,导致系统故障进而出现蓝屏。2、电脑超频过度引起电脑蓝屏,这也可能涉及到下面的温度过高引起的蓝屏。3、内存条...

文件格式转换器免费版(文件格式转换器免费版下载安装)

一般来说,使用全能格式转换器转换文件的步骤大致如下:1.打开全能格式转换器,并点击“添加文件”按钮,选择您要转换的文件。2.在“输出格式”选项中,选择您想要将文件转换成的格式。3.如果需要,您可...

口碑最好的随身wifi品牌(随身wifi十大排名)

哪个牌子最好用性价比最高一目了然!格行设备价格:69/99/109/139/168(性价比高)芯片:进口马维尔芯片套餐:双网设备,套餐价格一致,随用随充续航:3000毫安18小时左右 33...

新买的台式电脑没声音(新买的台式机没有声音)

解决方法如下:1、查看主板的声卡驱动装没装上。2、驱动装好了,在右下角的小喇叭有没有,如果有,鼠标放在上面,右击就会看到声音的各种设置,如果没看到小喇叭,进入设备管理器看一下声音的硬件上是否有黄色标记...

dlink路由器设置密码步骤(dlink路由器设置教程)
  • dlink路由器设置密码步骤(dlink路由器设置教程)
  • dlink路由器设置密码步骤(dlink路由器设置教程)
  • dlink路由器设置密码步骤(dlink路由器设置教程)
  • dlink路由器设置密码步骤(dlink路由器设置教程)
三星笔记本u盘启动快捷键(三星笔记本u盘启动设置)

开机出现“SAMSUNG”画面时按F2进入BIOS设置,找到【Advanced】选项下,将快速启动“FastBIOSMode”项选为“Off”2.按F10键保存退出并重启,插入U盘,再次按F2键进入B...

普联无线路由器设置(普联路由器上网设置)

关于这个问题,以下是普联无线路由器的设置步骤:1.首先,将您的普联无线路由器与电脑或笔记本电脑连接。2.打开您的浏览器,输入路由器的IP地址(通常为192.168.1.1或192.168...

光盘映像文件怎么打开运行(光盘映像文件是干嘛的)
  • 光盘映像文件怎么打开运行(光盘映像文件是干嘛的)
  • 光盘映像文件怎么打开运行(光盘映像文件是干嘛的)
  • 光盘映像文件怎么打开运行(光盘映像文件是干嘛的)
  • 光盘映像文件怎么打开运行(光盘映像文件是干嘛的)
万兴数据恢复专家免费版(万兴数据恢复专家app)

手机版本目前还在开发当中,目前只有电脑版本跟网页版万兴数据管家,非常靠谱!这是一款专门针对苹果微信数据管理的软件,能够恢复苹果手机聊天记录、聊天记录备份、聊天记录导出!支持微信免费备到本地电脑,包括聊...

笔记本电脑怎么打开摄像头功能

看你的情况是,笔记本自带摄像头吧!如果是的话,只要和别人用通讯工具(支支视频,比如qqskype)聊天时,都可以自动打开!如果想单纯的自拍,打开“我的电脑”认真看,有一个选项(除了硬盘分区、光驱之外)...

w7主题设置(w7怎么换主题)

1、打开win7系统电脑左下角“开始”菜单,找到【控制面板】点击打开;2、进入控制面板界面,右上方【查看方式】更改为“小图标”,然后找到【管理工具】打开;3、进入“管理工具”,点击打开【服务】选项;4...