什么是wildfly

公司要用Wildfly做项目的部署,于是整合了一些资料
唯一美中不足的是需要自己去理解配置文件的意义,有时间再补

基于Wlidfy的部署

1JBoss是web服务器的一种,主要做EJB容器,和tomcat集成就可以jsp,servlet,ejb通吃了JBoss有两种版本,一种是独立的,一种是和tomcat集成的,当然都是免费的啦EJB(enterprise javabean),他不是javabean简单的升级,而是一些提供分布式访问的类包括实体bean,会话bean,消息驱动bean

什么是wildfly

JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。

WildFly是一个灵活的、轻量的、强大管理能力的应用程序服务器。Wildfly是一个管理EJB的容器和服务器,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

特点

  • 无与伦比的速度:快速启动,无限的网络性能和可扩展性。
  • 非常的轻量级:瘦内存管理,运行时间可定制化。
  • 强大的管理功能:统一的配置和管理。

Wildfly更多特点及与市面上常见的Web服务对比,可参看《热门WEB容器TOMCAT、JETTY、 GLASSFISH、WILDFLY对比》。

下载安装

wildfly下载地址:https://wildfly.org/downloads/ (PS:如果想要下载linux版本,要redhat权限登录一下账号)

安装java环境要求Java8或更高版本。

所谓的安装即解压即可。下面看一下该版本的目录结构:

├── LICENSE.txt
├── README.txt
├── appclient
├── bin
├── copyright.txt
├── docs
├── domain
├── jboss-modules.jar
├── modules
├── standalone
└── welcome-content复制代码

standalone目录下存放的应用将单独占用进程,可单独启动和关闭,之间没有关联性。旗下有许多xml文件可供启动时选择。

domain目录下的应用之间有关联性,managing multiple servers from a single control point。

modules目录,jboss采用module加载驱动。

readme及启动命令

重点看一下readme中的内容,提供了启动相关的指导。

关键特性:

Key Features
------------
* Jakarta EE 8 support
* Fast Startup
* Small Footprint
* Modular Design
* Unified Configuration and Management
* Distributed Domain Management复制代码

文档获取,同时也可以看出启动时默认是监听8080端口。

Also, once WildFly is started you can go to http://localhost:8080/
for additional information.复制代码

启动命令:

Starting a Standalone Server
----------------------------
A WildFly standalone server runs a single instance.

<JBOSS_HOME>/bin/standalone.sh      (Unix / Linux)

<JBOSS_HOME>\bin\standalone.bat     (Windows)复制代码

启动脚本位于根目录/bin目录中。Windows为standalone.bat,Linux为standalone.sh。

Wildfly还可以启动一个管理后台来对服务进行管理。

Starting a Managed Domain
-------------------------
A WildFly managed domain allows you to control and configure multiple instances,
potentially across several physical (or virtual) machines. The default 
configuration includes a domain controller and a single server group with three 
servers (two of which start automatically), all running on the localhost.

<JBOSS_HOME>/bin/domain.sh      (Unix / Linux)

<JBOSS_HOME>\bin\domain.bat     (Windows)复制代码

启动脚本位于根目录/bin目录中。Windows为domain.bat,Linux为domain.sh。

停止服务,可以通过控制台输入Ctrl+c命令来操作。如果服务在后台运行,可执行一下命令进行停止。

<JBOSS_HOME>/bin/jboss-cli.sh --connect --command=:shutdown      (Unix / Linux)

<JBOSS_HOME>\bin\jboss-cli.bat --connect --command=:shutdown     (Windows)复制代码

启动操作

现在启动项目standalone看一下效果。

19:48:11,234 INFO  [org.jboss.as.ejb3] (MSC service thread 1-6) WFLYEJB0482: Strict pool mdb-strict-max-pool is using a max instance size of 32 (per class), which is derived from the number of CPUs on this host.
19:48:11,234 INFO  [org.jboss.as.ejb3] (MSC service thread 1-2) WFLYEJB0481: Strict pool slsb-strict-max-pool is using a max instance size of 128 (per class), which is derived from thread worker pool sizing.
19:48:11,296 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-4) WFLYUT0006: Undertow HTTP listener default listening on 127.0.0.1:8080
19:48:11,409 INFO  [org.jboss.as.ejb3] (MSC service thread 1-6) WFLYEJB0493: EJB subsystem suspension complete
19:48:11,479 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) WFLYJCA0001: Bound data source [java:jboss/datasources/ExampleDS]
19:48:11,579 INFO  [org.jboss.as.patching] (MSC service thread 1-3) WFLYPAT0050: WildFly Full cumulative patch ID is: base, one-off patches include: none
19:48:11,596 WARN  [org.jboss.as.domain.management.security] (MSC service thread 1-5) WFLYDM0111: Keystore /Users/zzs/tools/wildfly18/standalone/configuration/application.keystore not found, it will be auto generated on first use with a self signed certificate for host localhost
19:48:11,606 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-6) WFLYDS0013: Started FileSystemDeploymentService for directory /Users/zzs/tools/wildfly18/standalone/deployments
19:48:11,746 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0006: Undertow HTTPS listener https listening on 127.0.0.1:8443
19:48:11,846 INFO  [org.jboss.ws.common.management] (MSC service thread 1-2) JBWS022052: Starting JBossWS 5.3.0.Final (Apache CXF 3.3.3)
19:48:11,963 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
19:48:11,965 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
19:48:11,965 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
19:48:11,965 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 18.0.0.Final (WildFly Core 10.0.0.Final) started in 3880ms - Started 315 of 577 services (369 services are lazy, passive or on-demand)复制代码

通过以上部分日志可以看到,wildfly监听了8080,8443和9990端口。

访问服务器的url为:127.0.0.1:8080,访问管理后台的url为:http://127.0.0.1:9990/。

访问服务器可看到如下页面:

image

页面内包含文档、快速启动、管理后台等链接。

此时访问后台管理会提示如下内容:

Welcome to WildFly
Your WildFly Application Server is running.
However you have not yet added any users to be able to access the admin console.

To add a new user execute the add-user.sh script within the bin folder of your WildFly installation and enter the requested information.

By default the realm name used by WildFly is "ManagementRealm" this is already selected by default.

After you have added the user follow this link to Try Again.复制代码

也就是说启动成功了,但没有配置用户。同tomcat一样,wildfly也有自己的服务管理页面,可以统一管理应用,设置权限用户。执行add-user脚本来添加管理者用户。

bin zzs$ ./add-user.sh

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
 # 输入a,以添加管理用户
(a): a

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
# 输入用户名
Username : zzs
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
 - The password should be different from the username
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
 # 输入用户密码
Password :
# 重新输入密码
Re-enter Password :
# 留空即可或输入ManagementRealm
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]: ManagementRealm
About to add user 'zzs' for realm 'ManagementRealm'
# 继续则输入yes
Is this correct yes/no? yes
Added user 'zzs' to file '/Users/zzs/tools/wildfly18/standalone/configuration/mgmt-users.properties'
Added user 'zzs' to file '/Users/zzs/tools/wildfly18/domain/configuration/mgmt-users.properties'
Added user 'zzs' with groups ManagementRealm to file '/Users/zzs/tools/wildfly18/standalone/configuration/mgmt-groups.properties'
Added user 'zzs' with groups ManagementRealm to file '/Users/zzs/tools/wildfly18/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
# 继续则输入yes
yes/no? yes

这里需要注意,用户添加完毕后,将回馈给你此用户的secret value,可在domain与slave 的通信中用到
To represent the user add the following to the server-identities definition <secret value="MTk4NzEwMjlfUXE=" />复制代码

每一步操作都会有对应的提示与选项,按照提示填写即可。

设置完成,再进点击Administration Console或访问http://127.0.0.1:9990/,输入刚刚设置的用户名密码,即可登录管理后台。

image

总结一下具体步骤(第一版)

1.配置环境变量(下载上面有)

配置环境变量(非必要步骤),建议还是将环境变量配好,便于dos中命令操作;

我的电脑-右键属性-高级系统设置-环境变量-新增JBOSS_HOME,路径为你解压JBOSS的路径,比如我的路径为D:\jboss-as-7.1.1.Final;

img

我的电脑-右键属性-高级系统设置-环境变量-新增PATH路径,%JBOSS_HOME%\bin;

3、环境变量配好之后,需要为JBOSSt添加用户,调用dos窗口,输入命令

cd %JBOSS_HOME%bin

add-user,如下图所示:(或者可以直接start add-user.bat)

img

根据提示完成操作即可;问你group的时候可以空格

我添加的admin 123456678

这句话可能用到 To represent the user add the following to the server-identities definition

2、启动Jboss,在dos窗口中输入命令standalone;或者在Jboss的bin目录下找到standalone.bat双击启动:

或者start standalone.bat

img

img

​ 5、访问测试一下,输入http://localhost:8080/进入如下界面安装成功:

img

三、部署

​ 1、在jboss的\standalone\configuration目录下有个standalone.xml文件,里边配置相关的端口等;

img

​ 2、要发布项目,可以将打包好的war直接放置在jboss的\standalone\deployments文件下即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

来源:稀土掘金

window下JBoss7 安装部署(第二版)

img

Bypasslv-3

2021年04月14日 18:10 · 阅读 134

0x01 下载安装

1、下载地址: www.jboss.org/jbossas/dow…

2、解压缩:选择一个安装目录解压 jboss-as-7.1.1.Final.zip

3、设置JAVA环境变量如下:

变量名:JAVA_HOME
变量值:C:\Program Files (x86)\Java\jdk1.8.0_91        // 要根据自己的实际路径配置
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;         //记得前面有个"."
变量名:Path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
复制代码

4、Jboss启动

老版本如4.x启动bin目录下的run.bat,7.1版本的启动standalone.bat

本地访问 http://127.0.0.1:8080

img

0x02 其他设置

A、设置外网访问:

如:http://192.168.204.143:8080 是无法访问的。因为部署完后,默认只能本地访问(即:只有127.0.0.1能访问),如果想让其他人也可以访问你的网页,需要修改JBoss的配置文件,即修改standalone.xml,增加本机Web地址的内容。

1、打开%Jboss_HOME%\standalone\configuration\standalone.xml

2、找到

将127.0.0.1 改为192.168.204.143,重新启动JBoss,即可外部访问。

在jboss4.x-6.x版本中,位置还不同:

打开%JBOSS_HOME%\server\default\deployers\jbossweb.deployer\server.xml,

      <Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}"
         redirectPort="8443" />

替换为
      <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.0.0.0.0}" 
               connectionTimeout="20000" redirectPort="8443" />
复制代码

B、添加用户

进入控制页面 ,如下图所示:

img

安装提示需要生成用户名密码 ,如下图所示:

img

重新打开一个cmd 进入bin目录 执行add-user.bat,按照提示进行 ,如下图所示:

img

To represent the user add the following to the server-identities definition
请按任意键继续. . .

jboss jboss

设置成功 再次进入 成功进入后台控制页面 ,如下图所示:

img

C、安装错误,无法启动

有时候在你启动JBOSS的时候,会卡在这边,无法继续。这个问题,实际上是由于当前系统的Java版本不适应而引发的。

解决方法:将我的Java版本1.8 更换Java版本为1.7后,问题就解决了。(JBOSS的启动恢复正常)

img

D、开启Jboss访问日志

在默认的情况下,JBoss7是没有开启access_log的,如果要开启这项功能,就需要修改$JBOSS_HOME\standalone\configuration\standalone.xml这个文件,备份配置文件,相关的修改内容如下所示:

<virtual-server name="default-host" enable-welcome-root="true">
    <alias name="localhost"/>
    <alias name="example.com"/>
    <access-log pattern="%t %a %m %U %s %D" prefix="access_log." rotate="true">
        <directory path="." relative-to="jboss.server.log.dir"/>
    </access-log>
</virtual-server>
复制代码

重启即可看到${jbossHome}\standalone\log\目录下生成access_log。

0x03 项目部署

把war包放到目录 %Jboss_HOME%\standalone\deployments\ 下,自动完成部署

img

JBoss与Springboot的整合

1.安装JBOSS

安装JBOSS

本体所在在这里可以下载到JBOSS的安装包用win安装为例

解压缩到本地 记住解压缩的地址配置JBOSS的环境变量

JBoss EAP 安装:``将 zip 文件复制到本地磁盘上的 C:\JavaDev\tools 文件夹``使用解压缩工具解压缩 zip 文件。文件夹 C:\JavaDev\tools\jboss-eap-* 应该被创建并填充内容``设置环境变量 JBOSS_HOME 指向新创建的 JBoss EAP 文件夹。前任。设置 JBOSS_HOME=C:\JavaDev\tools\jboss-eap-7.3

image.png JBOSS 依赖于JAVA环境所以在安装前请确保你有安装JAVA环境 配置用户路径

image.png

2.安装补丁

JBoss 补丁更新:1. 将补丁 zip 文件复制到本地磁盘上的 C:\JavaDev\tools 文件夹。2. 启动 JBoss 服务器。3. 使用连接到 JBoss CLI。例如:“jboss-cli.bat -c --controller=127.0.0.1:9990” 4. 从 JBoss CLI 命令提示符运行补丁应用命令。例如:“补丁应用 C:\JavaDev\tools\jboss-eap-7.3 .5-patch.zip"

3.集成

3.1与IDEA集成 目前来说最方便的是IDEA ultimate版本的可以自带插件

image.png

很容易找到设置好自己的JBOSS安装路径就很好使用了 当你配置好了 用Maven命令

mvn clean install   
复制代码

打包安装 直接就会部署到Jboss里面

3,2 与eclipse集成

也不难 在插件市场搜索JBOSS 路径为 HELP-> 插件市场 搜索JBOSS

image.png 安装就可以了,要部署的项目要先打成JAR或者war包 然后再Servers选项卡设置一下JBOSS,然后部署添加已经打好的包.

3.3 手动部署已经打好的包

直接把包放在安装文件的 standalone->deployments 就可以部署了

或者maven命令

mvn clean install -Pjboss,localdev
复制代码

4.启动JBOSS

在IDEA和eclipse中,利用插件可以直接启动,手动启动的话 需要进入到[JBOSS_HOME]/bin

输入命令

standalone.bat
复制代码

如果需要指定文件启动的话

EAP_HOME/bin/standalone.bat --server-config=standalone-full.xml
复制代码

IDEA指定配置文件启动需要:

-Djboss.server.default.config=standalone-full.xml
复制代码

image.png

eclipse指定文件启动只需要配置一下启动文件就可以.

5.添加JBOSS用户

CMD -> cd [JBOSS_HOME]/bin

输入命令

dd-user.bat
复制代码

Enter Username & Password Enter ‘Yes’ for the question ‘About to add user username to Management Console’ Enter ‘No’ for EJB calls Done ! You can use this credentials to log in to JBoss console

好的添加用户成功.

6.启动

启动会自动打开浏览器 如果没有请访问http://localhost:9990/console/

如果一切顺利你会看到之前你部署好的包. 最后,记录一下自己的部署过程,将来忘了有个参考,如有错误,请留言我及时改 谢谢.

可以修改文件配置也可以在http://127.0.0.1:9990/console/index.html#home直接部署

比如在standalone的configeration里面有各种的properties

Springboot项目打war包注意

Springboot项目部署在Jboss上的一些问题

前言


由于公司的问题,重构后的微服务必须要部署在Jboss上, 版本为Jboss EAP 7.1,Springboot 2.1.3.RELEASE。部署时候遇到了一些问题,在这记录下来

一、修改Jboss根目录为应用访问目录


首先将jboos的默认欢迎页修改为空,否则会冲突,打开jboss-eap-7.1standaloneconfigurationstandalone.xml, 找到

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>
            <filters>
                <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>
        </subsystem>

修改为

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <!--<location name="/" handler="welcome-content"/>-->
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <!--<handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>-->
            <filters>
                <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>
        </subsystem>

修改前记得备份,jboss启动后会将这些注释的部分自动清除

此时的根路径已经为空,我们需要将项目路径映射到根路径,

新建一个文件jboss-web.xml,文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/</context-root>
</jboss-web>

将我们的war包用WinRAR打开,这个文件放到WEB-INF目录下

img

此时启动jboss访问根路径就是我们的项目路径了

二、Springboot项目打包成war的注意事项


<!-- 打war包时加入此项, 告诉spring-boot tomcat相关jar包用外部的,不要打进去 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

尤其在使用非tomcat容器时,必须加入将tomcat相关包**exclusions,**或者像上面一样改为provided,否则启动容器时会有类转换异常

三、Jboss正常启动,但没有启动SpringBoot项目


img

可以看到Jboss正常启动了,但是没有Springboot项目启动的标识,这个时候是由于Jboss无法识别我们的Servlet

正常的Springboot项目启动类是这样的。

@EnableEurekaServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

这种方式在tomcat容器中启动可以,但是Jboss无法这样启动,需要改成

@EnableEurekaServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class EurekaApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(EurekaApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

这样Jboss启动时才能查找到我们的Servlet

四、Eureka启动成功,可以注册服务但是访问页面空白


img

img

可以看到此时的Springboot项目已经加载进来,服务也可以正常注册,但打开Eureka页面时一片空白

此时打开控制台发现,访问路径404(这里我没有修改根路径为项目路径,Jboss默认war包名字是访问路径)

这是由于Springboot使用freeMark导致的

img

解决方案:

yml文件中添加

img

这个配置的意思是 是否优先从文件系统加载template,默认值为true

修改后再打包启动

img

页面可以正常访问

参考 http://t.zoukankan.com/gtblog-p-11237070.html,springboot如何联合jboss

参考:https://juejin.cn/post/7024410697773613093?share_token=64b70cf2-af71-4589-849c-53d15709067f

参考 wildfly快速入门

https://juejin.cn/post/6844903969848819720?share_token=c2b4e36b-9644-4090-908d-2eb2ac6aef57

参考Jboss linux安装

https://juejin.cn/post/7025416806646956045?share_token=247480ea-172b-4f23-bef1-776884169c40

参考中间件安全加固之Jboss

https://juejin.cn/post/6950953717113815054?share_token=664f6154-e726-4c7f-98d3-4dc90bbda956,

(含一些登录的配置)

参考 WebLogic、WebSphere、JBOSS、Tomcat 之间的区别

https://juejin.cn/post/6869567966942511112?share_token=38c24a49-b880-4320-80a9-1b9633bdfea1

window下JBoss7 安装部署(完整)

https://juejin.cn/post/6950953713062117407?share_token=69961d1e-229c-4364-8616-d55fa2b80224

jboss调试配置springboot时候容易出现的问题

https://juejin.cn/post/6844903912198111239?share_token=6ceeb124-dab4-42c3-9440-90721012a86e,

访问localhost:8080/war包名

https://juejin.cn/post/6844903959442751496?share_token=c303fa69-0e13-436f-884a-0a3d201d6192,访问

jboss配置完整版

https://cloud.tencent.com/developer/article/2157948

40

参考中间件安全加固之Jboss

https://juejin.cn/post/6950953717113815054?share_token=664f6154-e726-4c7f-98d3-4dc90bbda956,

(含一些登录的配置)

参考 WebLogic、WebSphere、JBOSS、Tomcat 之间的区别

https://juejin.cn/post/6869567966942511112?share_token=38c24a49-b880-4320-80a9-1b9633bdfea1

window下JBoss7 安装部署(完整)

https://juejin.cn/post/6950953713062117407?share_token=69961d1e-229c-4364-8616-d55fa2b80224

jboss调试配置springboot时候容易出现的问题

https://juejin.cn/post/6844903912198111239?share_token=6ceeb124-dab4-42c3-9440-90721012a86e,

访问localhost:8080/war包名

https://juejin.cn/post/6844903959442751496?share_token=c303fa69-0e13-436f-884a-0a3d201d6192,访问

jboss配置完整版

https://cloud.tencent.com/developer/article/2157948

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值