Jboss eap7.1 配置部署入门
standalone 完整案例参考,目录地址为:jboss-as-7.1.1.Final-1\standalone\configuration
host 完整参考案例,目录地址为:jboss-as-7.1.1.Final-1\domain\configuration
本文介绍了 Linux 系统下 Jboss-eap-7.1 服务器 standalone 模式的配置部署入门。90%的内容来自 jboss 的官方配置文档,只不过从初学者的角度对配置过程进行了梳理,介绍了部署应用时普遍会用到的配置项。参考本文,大多数应用可以在 Jboss-eap-7.1 上成功运行。下文出现的命令、代码和文件地址中,${JBOSS_HOME} 指代 Jboss-eap-7.1 所处的根目录。
安装与启动、停止
安装:所谓“安装”,就是把下载好的包解压到某个地址即可。
启动:进入 ${JBOSS_HOME}/bin 目录,执行 standalone.sh 脚本,看到输出 started in XXXXms,就证明服务器已经成功启动。
停止:服务器的进程通常都是后台运行。停止时,在 ${JBOSS_HOME}/bin 目录下执行 ./jboss-cli.sh --connect,进入命令行管理页面,输入 shutdown 命令,即可停止服务器。(也可以合并为一条语句: ./jboss-cli.sh --connect command=:shutdown)
配置:修改 ${JBOSS_HOME}/bin 下的 standalone.conf 文件,可以改变 Jboss 启动的配置。在文件中加入 JAVA_HOME="/path/jdk" ,可以指定使用的 jdk,而不必依赖于系统默认的 java 环境变量。
在文件中加入 LANG=Zh_CN.GB18030,可以设定语言环境为中文修改 JAVA_OPTS,可以设置 JVM 的启动参数
基本概念
jboss-eap-7.1 有两种运行模式,standalone ——单机模式 和 domain ——集群模式。本文介绍了单机模式的部署。
jboss 启动服务器时,默认读取的配置文件是 ${JBOSS_HOME}/standalone/configuration/standalone.xml。也可以指定读取其他配置文件,命令是
./standalone.sh --server-config=standalone-custom.xml
jboss-cli(command line interface),是 jboss 的命令行管理工具。执行
${JBOSS_HOME}/bin/jboss-cli.sh
即可进入。通过命令行实现部署卸载应用、配置系统设置和执行管理任务的功能。使用该工具修改系统配置时,最终也会作用到 standalone.xml 中。直接改xml的方式非常直观,所以更受本人青睐,本文所有配置示例均是直接修改 xml。
Management Console,管理控制台。是jboss提供的web管理系统,地址在
http://localhost:9990/console/App.html,所有的操作均可通过jboss-cli实现,本文不再介绍该工具。
standalone.xml 配置
地址配置
默认的配置,服务器启动后只能通过localhost访问。通过网卡IP地址访问时,需修改配置文件。找到下面的配置片段
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
将 public 标签下的地址修改为网卡 ip 地址,这样就能通过 IP 地址访问。也可以设置为 0.0.0.0,机器上所有可用的 ip 地址均可以访问。不建议修改 management 标签下的地址,个人认为远程的管理存在一定风险,还是直接在机器上做比较好。
端口配置
修改监听的端口,找到下面的配置片段:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
………… ………… …………
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
………… ………… …………
</socket-binding-group>
根据需要修改不同协议监听的端口。管理控制台的端口默认是9990,也可以在此处修改。
数据源配置
数据源配置如下面代码所示,标签的含义非常明晰,不再针对标签做解释说明。
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasources>
………… ………… …………
<datasource jndi-name="java:jboss/datasources/MyDB" pool-name="MyDB" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:jtds:sybase://10.2.4.16:11100/testDB;charset=cp936</connection-url>
<driver>jtds124</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>user</user-name>
<password>password</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"/>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>true</validate-on-match>
<exception-sorter class-name="org.jboss.resource.adapter.jdbc.vendor.SybaseExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
</timeout>
<statement>
<track-statements>true</track-statements>
</statement>
</datasource>
<drivers>
………… ………… …………
<driver name="jtds124" module="net.sourceforge.jtds.jdbc.124">
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
配置好数据源后,需要将数据库驱动 jar 包放在 ${JBOSS_HOME}/modules 下正确的位置,才能成功绑定数据源。驱动的放置目录要和 driver 标签中 module 的值保持一致,以上面的配置为例,驱动 jar 包的路径应该是
${JBOSS_HOME}/modules/modules/net/sourceforge/jtds/jdbc/124/main/main
不要体现在属性中,124 文件夹下必须要有main文件夹,jar 包在 main 文件夹中。main 文件夹下还要有 module.xml ,配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="net.sourceforge.jtds.jdbc.124">
<resources>
<resource-root path="jtds-1.2.4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="org.jboss.as.connector"/>
</dependencies>
</module>
module.xml中module标签的name属性要和standalone.xml中driver标签的module属性保持一致。
符合JDBC标准的数据源如此就配置完成。但本例中使用的是jtds,所以还要做额外的操作,否则无法正确绑定数据源。在驱动jar包的META-INF文件夹中新建services文件夹,然后新建名为java.sql.Driver的文件,在文件第一行写下Driver的路径。本例中,java.sql.Driver文件的内容如下:
net.sourceforge.jtds.jdbc.Driver
经过上述配置,在启动服务器时,看到输出Started Driver service with driver-name = jtds124,证明数据源配置成功。
Undertow容器配置
经过下面的配置操作,修改了接收http请求的设置、容器默认的字符集,移除了jboss默认的欢迎页面,开启了http访问的日志以及输出http请求和响应的信息。找到如下配置片段,默认配置为:
<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">
………… ………… …………
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<filters>
………… ………… …………
</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" url-charset="GBK" decode-url="false"/>
<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"/>
<filter-ref name="request-dumper"/>
<access-log pattern="combined" directory="${jboss.home.dir}/standalone/log"/>
</host>
</server>
<servlet-container name="default" default-encoding="GBK" use-listener-encoding="true">
………… ………… …………
</servlet-container>
<!-- <handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers> -->
<filters>
………… ………… …………
<filter name="request-dumper" class-name="io.undertow.server.handlers.RequestDumpingHandler" module="io.undertow.core"/>
</filters>
</subsystem>
1. 修改http请求设置:
在 http-listener 标签中,增加了 url-charset 和 decode-url。其中 url-charset 默认使用的UTF-8,可以根据需要修改。decode-url 指是否使用字符集解码 url 和参数,默认为 true。设为 false 则交由后续代码进行解码处理。http-listener 的详细配置属性
官方:https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.1/html/configuration_guide/reference_material#http_listener_attributes
2. 修改容器默认字符集:
在 servlet-container 标签中,default-encoding 设置所有应用的字符集(默认为utf-8),use-listener-encoding 指是否使用 listener 定义的编码。servlet-container 的详细配置属性
官方:https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.1/html/configuration_guide/reference_material#servlet_container_attributes
3. 移除Jboss默认欢迎页面:
配置文件中注释的部分,就是 jboss 默认欢迎页面的配置。直接注释就是将其移除,也可以将默认地址映射到某个应用上。
4. 开启http访问日志:
在host标签下增加 access-log 这一标签,即可将http请求的信息记在日志中,便于调试。directory 是日志存放的目录,默认文件名为 access_log.log 。pattern 是要日志中记录的信息,预定义了common 和 combined 两种模式,combined 的信息丰富一些。
5. 输出http请求和响应的信息:
在filters标签下增加名为request-dumper的filter,在host标签下增加命名一致的filter-ref,就能在jboss日志中输出每一个http请求的request和response信息,便于调试。
<system-properties>
<property name="org.apache.catalina.connector.URI_ENCODING" value="GBK"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>
部署应用
下面将介绍三种部署模式,但官方推荐在生产环境中,使用第三种手动模式,前两种可以应用于开发环境。应用部署相关的默认配置如下:
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
</subsystem>
scan-interval是每隔多少毫秒扫描deployments文件夹下的变化。如果设定的值小于1,则只在启动时扫描。
全自动模式
在默认配置下,将war包上传至${JBOSS_HOME}/standalone/deployments,服务器会在启动时和每5000毫秒间隔,检查deployments下的文件变化,部署应用。
半自动模式
增加属性 auto-deploy-zipped=”false”
上传应用 myApp.war 至 deployments 文件夹后,在 deployments 文件夹下新建一个文件,命名为 myApp.war.dodeploy,服务器检测到这个文件后,则会开始执行部署。
手动模式
增加属性 scan-enabled=”false”
此模式是官方推荐的生产环境部署应用方式,无需将应用上传至 deployments 文件夹下。首先保证 myApp.war 在服务器上,假设其路径为 /usr/me/myApp.war。启动服务器,并使用
./jboss-cli.sh --connect
命令进入命令行管理界面。执行命令deploy /usr/me/myApp.war 部署应用。取消部署时,在命令行管理界面执行 undeploy myApp.war 。应用的数据会在 ${JBOSS_HOME}/standalone/data/content 下,并且 standalone.xml 最下方会出现 deployments 标签,显示已经部署的应用。
题外话
既然是一个入门级的教程,就介绍下jboss一系列的产品。因为改名,导致jboss系列越来越乱,下面做一个简单梳理。
Undertow: Jboss自主研发的 Servlet 容器。
Jboss AS(Application Server): Jboss社区版的早期版本,由于和Jboss eap名称相近,在 Jboss AS7 之后就改名为 Wildfly。内部封装的容器是基于Tomcat的升级版。
WildFly: 版本号从WildFly 8.0开始,由Jboss AS改名而来。内部封装的容器是 Undertow。
Jboss EAP(Enterprise Application Platform):Jboss的企业版。会将社区版中验证过的,成熟的技术引入该版本,支持周期长。6的版本以Jboss AS7为基础;7的版本以Wildfly为基础。