JBoss(WildFly)应用服务器
JBoss是Red Hat(红帽)公司维护的开源企业级Java应用服务器,遵循LGPL许可协议,可免费商用。其核心产品现已更名为 WildFly(原JBoss Application Server),是Red Hat旗下开源企业级Java中间件。截至2026年,WildFly已发布至39版本以上,JBoss EAP(商业版)已发布至8.0版本。
第一部分:JBoss核心架构
一、模块化架构
JBoss/WildFly的核心采用 JBoss Modules 系统,通过模块化架构实现组件的按需加载。每个功能模块(如Servlet容器、EJB实现、JMS服务)以独立JAR包形式存在,运行时仅加载必要模块,显著降低内存占用。
每个模块拥有独立的类路径,通过module.xml定义依赖关系,避免类冲突。
二、子系统层
WildFly将功能划分为多个可插拔的子系统:
| 子系统 | 功能 |
|---|---|
| Undertow | 高性能HTTP服务,支持HTTP/2和WebSocket |
| EJB3 | 远程EJB调用和分布式事务 |
| JPA | 集成Hibernate作为默认JPA提供者 |
| Elytron | 统一安全框架,替代旧版安全子系统 |
| Datasources | 数据库连接池管理 |
三、两种运行模式
1. 独立模式(Standalone)
单服务运行,适合开发和中小规模部署。配置文件位于standalone/configuration/standalone.xml。
2. 域模式(Domain)
集群管理单元,通过Domain Controller统一管控多台主机服务器。域模式下可实现负载均衡、会话复制、故障转移等能力。
四、JBoss EAP与WildFly的关系
| 版本 | 定位 | 特点 |
|---|---|---|
| WildFly | 开源社区版 | 免费、更新频繁、最新特性 |
| JBoss EAP | 红帽商业版 | 基于WildFly优化、官方技术支持、长期稳定 |
第二部分:环境准备
一、JDK要求
| JBoss/WildFly版本 | JDK要求 |
|---|---|
| WildFly 39+ / JBoss EAP 8 | JDK 11 或 JDK 17 |
| WildFly 28-38 | JDK 11+ |
| JBoss EAP 7.x | JDK 8 或 JDK 11 |
二、下载
- WildFly(开源版):https://wildfly.org/downloads/
- JBoss EAP(商业版):需红帽订阅账号,从红帽客户门户下载
第三部分:各操作系统部署详解
一、Linux系统部署
1.1 安装JDK
# CentOS/RHEL
sudo yum install java-11-openjdk-devel
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-11-jdk
# 验证
java -version
1.2 安装JBoss/WildFly
# 下载并解压
wget https://github.com/wildfly/wildfly/releases/download/39.0.0.Final/wildfly-39.0.0.Final.tar.gz
tar -xzf wildfly-39.0.0.Final.tar.gz
sudo mv wildfly-39.0.0.Final /opt/wildfly
# 创建专用用户(安全建议)
sudo useradd -r -s /bin/false jboss
sudo chown -R jboss:jboss /opt/wildfly
1.3 配置环境变量
# 编辑 /etc/profile 或 ~/.bashrc
export WILDFLY_HOME=/opt/wildfly
export PATH=$PATH:$WILDFLY_HOME/bin
1.4 防火墙配置
# 放行端口(CentOS/RHEL 7+)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=9990/tcp
sudo firewall-cmd --reload
# 或使用iptables
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9990 -j ACCEPT
1.5 启动服务器
# 独立模式启动(默认配置)
cd /opt/wildfly/bin
./standalone.sh
# 指定配置文件启动(启用完整功能)
./standalone.sh -c standalone-full.xml
# 绑定到所有网络接口(允许外部访问)
./standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0
-b参数绑定公共接口,-bmanagement绑定管理接口。
1.6 配置为系统服务
创建systemd服务文件/etc/systemd/system/wildfly.service:
[Unit]
Description=WildFly Application Server
After=network.target
[Service]
Type=simple
User=jboss
Group=jboss
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
Environment=WILDFLY_HOME=/opt/wildfly
ExecStart=/opt/wildfly/bin/standalone.sh -b 0.0.0.0
ExecStop=/opt/wildfly/bin/jboss-cli.sh --connect command=:shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable wildfly
sudo systemctl start wildfly
1.7 部署项目
方法一:热部署(复制WAR文件)
# 将WAR包复制到部署目录
cp myapp.war /opt/wildfly/standalone/deployments/
JBoss支持热部署,将WAR文件放到deployments目录后会自动部署。
方法二:管理控制台部署
- 浏览器访问
http://服务器IP:9990 - 首次访问需创建管理员账户:
/opt/wildfly/bin/add-user.sh - 登录后点击「Deployments」→「Add」→ 上传WAR文件
方法三:CLI命令行部署
/opt/wildfly/bin/jboss-cli.sh --connect
deploy /path/to/myapp.war
1.8 部署案例:Linux + MySQL
场景:在CentOS 7上部署Spring Boot应用,连接MySQL数据库。
Step 1:安装MySQL驱动模块
# 下载MySQL JDBC驱动
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar
# 创建模块目录
mkdir -p /opt/wildfly/modules/com/mysql/main
# 复制驱动并创建module.xml
cp mysql-connector-java-8.0.33.jar /opt/wildfly/modules/com/mysql/main/
cat > /opt/wildfly/modules/com/mysql/main/module.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-8.0.33.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
EOF
Step 2:配置数据源
通过CLI添加数据源:
/opt/wildfly/bin/jboss-cli.sh --connect
data-source add \
--name=MySQLDS \
--jndi-name=java:jboss/datasources/MySQLDS \
--driver-name=mysql \
--driver-class=com.mysql.cj.jdbc.Driver \
--connection-url=jdbc:mysql://localhost:3306/mydb \
--user-name=root \
--password=password
Step 3:部署应用
cp myapp.war /opt/wildfly/standalone/deployments/
1.9 Linux部署完整示例脚本
#!/bin/bash
# JBoss部署自动化脚本
WILDFLY_HOME=/opt/wildfly
APP_NAME=myapp
WAR_PATH=/tmp/${APP_NAME}.war
# 1. 停止服务
sudo systemctl stop wildfly
# 2. 备份旧版本
if [ -f ${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war ]; then
mv ${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war \
${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war.bak
fi
# 3. 部署新版本
cp ${WAR_PATH} ${WILDFLY_HOME}/standalone/deployments/
# 4. 启动服务
sudo systemctl start wildfly
# 5. 检查部署状态
sleep 10
curl -s http://localhost:8080/${APP_NAME}/health | grep "UP"
二、Windows系统部署
2.1 安装JDK
- 下载并安装JDK 11或JDK 17
- 设置系统环境变量:
JAVA_HOME=C:\Program Files\Java\jdk-11- 在
Path中添加%JAVA_HOME%\bin
2.2 安装JBoss/WildFly
- 下载WildFly ZIP压缩包
- 解压到目标目录,如
C:\wildfly - 设置环境变量:
WILDFLY_HOME=C:\wildfly- 在
Path中添加%WILDFLY_HOME%\bin
2.3 启动服务器
# 打开命令提示符(以管理员身份运行)
cd C:\wildfly\bin
standalone.bat
启动后访问 http://localhost:8080 验证。
2.4 创建管理员账户
cd C:\wildfly\bin
add-user.bat
按提示输入用户名和密码。
2.5 配置为Windows服务
JBoss EAP提供了service.bat脚本用于安装为Windows服务:
cd C:\wildfly\bin
service.bat install /loglevel INFO
安装后在Windows服务管理控制台(services.msc)中可看到JBossEAP7服务。
2.6 修改端口和绑定地址
编辑C:\wildfly\standalone\configuration\standalone.xml:
<!-- 修改端口 -->
<socket-binding-group name="standard-sockets" default-interface="public"
port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="http" port="${jboss.http.port:8080}"/>
</socket-binding-group>
<!-- 修改绑定地址(允许外部访问) -->
<interfaces>
<interface name="public">
<inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>
</interfaces>
2.7 部署项目
# 将WAR包复制到部署目录(自动部署)
copy myapp.war C:\wildfly\standalone\deployments\
浏览器访问 http://localhost:8080/myapp。
2.8 Windows部署示例:Eclipse + JBoss
Step 1:在Eclipse中配置JBoss服务器
- Window → Preferences → Server → Runtime Environments
- Add → WildFly → 选择安装目录
Step 2:创建Dynamic Web Project
Step 3:右键项目 → Run As → Run on Server → 选择JBoss
Step 4:自动部署到服务器
三、macOS系统部署
3.1 安装JDK
# 使用Homebrew安装
brew install openjdk@11
# 或从Oracle官网下载安装
3.2 安装WildFly
# 下载并解压
curl -O https://github.com/wildfly/wildfly/releases/download/39.0.0.Final/wildfly-39.0.0.Final.tar.gz
tar -xzf wildfly-39.0.0.Final.tar.gz
sudo mv wildfly-39.0.0.Final /opt/wildfly
3.3 配置环境变量
编辑~/.bash_profile或~/.zshrc:
export WILDFLY_HOME=/opt/wildfly
export PATH=$PATH:$WILDFLY_HOME/bin
生效配置:
source ~/.bash_profile
3.4 启动服务器
cd /opt/wildfly/bin
./standalone.sh
macOS/Linux使用standalone.sh,Windows使用standalone.bat。
3.5 部署项目
cp myapp.war /opt/wildfly/standalone/deployments/
3.6 IntelliJ IDEA集成部署
- Run → Edit Configurations → 添加 JBoss Server
- 配置Application Server路径(指向
/opt/wildfly) - 选择要部署的Artifact
- 点击Run启动并自动部署
四、Docker容器部署
4.1 使用官方镜像
# 拉取WildFly镜像
docker pull quay.io/wildfly/wildfly:latest
# 运行容器
docker run -d -p 8080:8080 -p 9990:9990 --name wildfly quay.io/wildfly/wildfly:latest
4.2 部署应用到容器
# 复制WAR文件到容器
docker cp myapp.war wildfly:/opt/jboss/wildfly/standalone/deployments/
# 或使用挂载卷
docker run -d -p 8080:8080 -p 9990:9990 \
-v /path/to/myapp.war:/opt/jboss/wildfly/standalone/deployments/myapp.war \
--name wildfly quay.io/wildfly/wildfly:latest
4.3 使用Bitnami镜像
Bitnami提供了优化过的WildFly镜像:
docker run --name wildfly bitnami/wildfly:latest
部署目录位于/opt/bitnami/wildfly/standalone/。
4.4 自定义Dockerfile
FROM quay.io/wildfly/wildfly:latest
# 添加MySQL驱动
ADD mysql-connector-java-8.0.33.jar /opt/jboss/wildfly/modules/com/mysql/main/
ADD module.xml /opt/jboss/wildfly/modules/com/mysql/main/
# 部署应用
ADD myapp.war /opt/jboss/wildfly/standalone/deployments/
# 启动脚本
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
第四部分:集群部署(域模式)
一、域模式架构
域模式下,一个Domain Controller管理多个Host Controller,每个Host Controller可运行多个Server Instance。
Domain Controller (master)
└── Host Controller (slave-1)
│ ├── Server One
│ └── Server Two
└── Host Controller (slave-2)
├── Server One
└── Server Two
二、域模式配置步骤
Step 1:配置Domain Controller
编辑domain/configuration/domain.xml,定义服务器组和部署策略。
Step 2:配置Host Controller(Master)
编辑domain/configuration/host.xml:
<host name="master" xmlns="urn:jboss:domain:8.0">
<management>
<security-realms>
<security-realm name="ManagementRealm">
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
</security-realm>
</security-realms>
</management>
<domain-controller>
<local/>
</domain-controller>
<servers>
<server name="server-one" group="main-server-group" auto-start="true"/>
<server name="server-two" group="main-server-group" auto-start="true"/>
</servers>
</host>
Step 3:配置Host Controller(Slave)
<host name="slave-1" xmlns="urn:jboss:domain:8.0">
<domain-controller>
<remote host="${domain.controller.host}" port="9990" security-realm="ManagementRealm"/>
</domain-controller>
<servers>
<server name="server-one" group="main-server-group" auto-start="true"/>
</servers>
</host>
Step 4:启动域控制器
# Master节点
./domain.sh --host-config=host-master.xml
# Slave节点
./domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=<MASTER_IP>
三、集群高可用配置
使用高可用配置文件启动:
# 独立模式 + HA
./standalone.sh --server-config=standalone-ha.xml
# 完整功能 + HA
./standalone.sh --server-config=standalone-full-ha.xml
集群配置在standalone-ha.xml中定义了JGroups通信协议和Infinispan缓存复制。
第五部分:安全配置(Elytron)
JBoss EAP 8使用Elytron作为统一安全框架。
一、创建安全域
./jboss-cli.sh --connect
/subsystem=elytron/security-domain=MyDomain:add(
realms=[{realm=ApplicationRealm}],
default-realm=ApplicationRealm,
permission-mapper=default-permission-mapper
)
二、配置HTTPS
Step 1:生成密钥库
keytool -genkeypair -alias wildfly -keyalg RSA -keystore wildfly.keystore \
-validity 365 -storepass password -keypass password \
-dname "CN=localhost, OU=IT, O=MyOrg, L=City, S=State, C=CN"
Step 2:配置SSL
/subsystem=elytron/key-store=MyKeyStore:add(path=wildfly.keystore,
relative-to=jboss.server.config.dir, credential-reference={clear-text=password})
/subsystem=elytron/key-manager=MyKeyManager:add(key-store=MyKeyStore,
credential-reference={clear-text=password})
/subsystem=undertow/server=default-server/https-listener=https:add(
socket-binding=https, ssl-context=MySSLContext)
第六部分:综合部署案例
案例:完整Java EE应用跨平台部署
场景:开发一个包含Servlet、JSP、EJB的Java EE应用,部署到JBoss EAP 8,连接PostgreSQL数据库。
1. 项目结构
myapp/
├── pom.xml
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/
│ │ │ ├── servlet/
│ │ │ │ └── HelloServlet.java
│ │ │ └── ejb/
│ │ │ └── HelloService.java
│ │ └── webapp/
│ │ ├── WEB-INF/
│ │ │ └── web.xml
│ │ └── index.jsp
└── target/
└── myapp.war
2. Maven配置(pom.xml)
<project>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.ejb</groupId>
<artifactId>jakarta.ejb-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
</plugins>
</build>
</project>
3. 各操作系统部署步骤对比
| 操作 | Linux | Windows | macOS |
|---|---|---|---|
| 安装JDK | yum install java-11 | 下载安装包 | brew install openjdk@11 |
| 解压 | tar -xzf wildfly.tar.gz | 解压ZIP | tar -xzf wildfly.tar.gz |
| 环境变量 | export WILDFLY_HOME=/opt/wildfly | 系统变量 | export WILDFLY_HOME=/opt/wildfly |
| 启动 | ./standalone.sh | standalone.bat | ./standalone.sh |
| 部署 | cp myapp.war deployments/ | copy myapp.war deployments\ | cp myapp.war deployments/ |
| 停止 | Ctrl+C 或 jboss-cli.sh --connect command=:shutdown | Ctrl+C | Ctrl+C |
4. 部署验证
部署完成后:
- 访问
http://localhost:8080/myapp查看应用 - 访问
http://localhost:9990进入管理控制台查看部署状态 - 查看日志:
tail -f /opt/wildfly/standalone/log/server.log
5. 完整部署脚本(Linux)
#!/bin/bash
# 完整部署脚本
set -e
WILDFLY_HOME=/opt/wildfly
APP_NAME=myapp
WAR_FILE=target/${APP_NAME}.war
echo "=== 1. 构建应用 ==="
mvn clean package
echo "=== 2. 停止服务器 ==="
${WILDFLY_HOME}/bin/jboss-cli.sh --connect command=:shutdown || true
echo "=== 3. 部署应用 ==="
cp ${WAR_FILE} ${WILDFLY_HOME}/standalone/deployments/
echo "=== 4. 启动服务器 ==="
${WILDFLY_HOME}/bin/standalone.sh -b 0.0.0.0 &
echo "=== 5. 等待启动 ==="
sleep 15
echo "=== 6. 验证部署 ==="
curl -s http://localhost:8080/${APP_NAME} | grep "Hello"
echo "=== 部署完成 ==="
第七部分:常用命令速查
启动与停止
| 操作 | Linux/macOS | Windows |
|---|---|---|
| 独立模式启动 | ./standalone.sh | standalone.bat |
| 指定配置启动 | ./standalone.sh -c standalone-full.xml | standalone.bat -c standalone-full.xml |
| 绑定所有IP | ./standalone.sh -b 0.0.0.0 | standalone.bat -b 0.0.0.0 |
| 域模式启动 | ./domain.sh | domain.bat |
| 停止服务 | ./jboss-cli.sh --connect command=:shutdown | jboss-cli.bat --connect command=:shutdown |
部署命令
| 操作 | 命令 |
|---|---|
| CLI连接 | ./jboss-cli.sh --connect |
| 部署WAR | deploy /path/to/app.war |
| 取消部署 | undeploy app.war |
| 查看部署 | ls /deployment |
管理控制台
- 地址:
http://localhost:9990 - 首次登录需创建管理员:
./add-user.sh(Linux/macOS)或add-user.bat(Windows)
第八部分:常见问题排查
1. 端口被占用
# Linux/macOS
netstat -tlnp | grep 8080
lsof -i :8080
# Windows
netstat -ano | findstr 8080
修改端口:编辑standalone.xml中的<socket-binding name="http" port="8080"/>。
2. 无法外部访问
确保:
- 启动时使用
-b 0.0.0.0参数 - 防火墙放行8080和9990端口
- 云服务器安全组放行相应端口
3. 内存不足
调整JVM参数,编辑standalone.conf(Linux/macOS)或standalone.conf.bat(Windows):
JAVA_OPTS="-Xms512m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
4. 部署失败
- 检查日志:
standalone/log/server.log - 确认WAR包格式正确
- 确认所有依赖已包含
总结
JBoss/WildFly作为企业级Java应用服务器,凭借其模块化架构、完整的Jakarta EE支持和灵活的部署方式,广泛应用于中大型企业核心系统。
| 操作系统 | 启动脚本 | 部署目录 | 特点 |
|---|---|---|---|
| Linux | standalone.sh | /opt/wildfly/standalone/deployments/ | 生产推荐,systemd服务管理 |
| Windows | standalone.bat | C:\wildfly\standalone\deployments\ | 开发便利,Windows服务支持 |
| macOS | standalone.sh | /opt/wildfly/standalone/deployments/ | 开发测试 |
| Docker | docker run | /opt/jboss/wildfly/standalone/deployments/ | 云原生部署 |
选择部署方式时需综合考虑环境类型(开发/测试/生产) 、团队技术栈和运维能力。Linux + systemd服务是生产环境的最优选择,Docker容器化则更适合云原生和微服务架构。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)