一直以来一直使用tomcat,今天学习了一下jboss,在这里总结一下jboss几种部署的方法,并对其中的一些地方进行了实验和探讨。
?
Jboss版本: 7.1.1.Final
启动模式:standalone模式
测试war包:mvntest.war (maven构建)
?
?
jboss提供图形界面的部署方式,启动jboss后,访问http://localhost:8080/会进入jboss的Welcome界面,
点击“Administration Console”【http://localhost:9990/console/App.html#server-overview】会进入控制台界面,注意第一次运行时会跳转的一个错误页面提醒你还没有设置用户名密码,上面有提示如何去设置用户名密码,按照上面的提示去创建。
进入JBOSS_HOME/bin目录下,运行add-user.sh脚本:
?
class="java" name="code">./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): Enter the details of the new user to add. Realm (ManagementRealm) : Username : jboss Password : Re-enter Password : About to add user 'jboss' for realm 'ManagementRealm' Is this correct yes/no? yes Added user 'jboss' to file 'JBOSS_HOME/standalone/configuration/mgmt-users.properties' Added user 'jboss' to file 'JBOSS_HOME/domain/configuration/mgmt-users.properties'
?这里选择ManagementRealm,默认就是这个,Realm:直接回车(默认),然后Username,Password,yes确定,这样jboss就会在相应的文件中加入了这个用户。再重新访问“Administration Console”,这个时候就会让你输入用户名、密码,输入以后就进入操作界面。
?
(1)选择Manage Deployments --> 右边Add Content --> 选择文件mvntest.war --> Next --> Save;
(2)这样还没有部署完毕,要enable这个应用,才算部署成功【同样也可以disable和remove应用】
【不管以何种方式部署的应用都可以在这个图形界面进行管理!】
?
?
(1) 进入JBOSS_HOME/bin目录下,执行jboss-cli.sh脚本,然后输入connect进入客户端【提供命令行管理客户端】
?
?
./jboss-cli.sh You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] connect [standalone@localhost:9999 /]
?(2) 部署
?
输入命令 deploy 全路径/mvntest.war 部署
?(3)取消部署
输入命令 undeploy mvntest.war 【这里输入名字即可】
?
?
如果项目是使用maven构建的,可以使用jboss插件进行部署
(1) 首先在pom.xml文件中加入
?
<plugin> <groupId>org.jboss.as.plugins</groupId> <artifactId>jboss-as-maven-plugin</artifactId> <version>7.1.1.Final</version> </plugin>
(2) 部署
?
执行?mvn jboss-as:deploy 命令,部署应用
(3) 移除部署
执行?mvn jboss-as:undeploy命令
?
?
?
?
这就是比较传统的一种部署方式,就是将mvntest.war文件拷贝到
JBOSS_HOME/standalone/deployments目录下,它会自动进行部署,部署成功后会生成一个mvntest.war.deployed, 里面内容是部署的war包的名字【与tomcat不同的是它不会解压war文件】
?
?
在测试了上面几种不同的部署方式后,遇到了一些问题,试着进行了实验和探讨:
?
1. 在进行上述几种部署方式后,除了传统方式,我对前三种部署方式比较好奇,因为他们部署成功后,并没有将war文件拷贝到JBOSS_HOME/standalone/deployments中,那这些部署文件放到哪里了呢?
(1) 首先,我想到的是jboss采用某种方式定位到war包所在位置,直接在war包所在的地方部署,因此我做个实验,在部署成功后删除了war包,发现web应用还能正常运行。所以否定了这种想法,那么jboss一定将这些war包拷贝到某个地方部署。
(2) 后来发现采用前三种方式部署时,部署成功后(但还没enable),会在standalone的configuration目录的standalone.xml文件中多出以下内容:
?
<deployments> <deployment name="mvntest.war" runtime-name="mvntest.war" enabled="false"> <content sha1="7d573693d193f5b9e650ee93140dacfc6c26e70a"/> </deployment> </deployments>
?这个sha1值大有玄机,接着在standalone的data/content目录下发现一个7d文件夹,然后里面有个573693d193f5b9e650ee93140dacfc6c26e70a文件夹(两个文件夹名字加起来就是上面的sha1值),下面有个content.zip的文件,解压开就是我的web应用。原来采用前三种部署方式,jboss会在standalone.xml加入部署信息,并计算出该web应用的一个sha1值,然后在data/content目录下建立一系列文件夹将应用使用zip打包放入【首先去web应用的sha1值(40个)的前2个字符创建第一层文件夹,再用余下的38个字符创建第二层文件夹,在将web应用打包进content.zip】。
?
这个地方要注意的是,如果采用第四种也就是传统方式部署的话,并不会进行上面的配置和拷贝,jboss会自动扫描deployments文件夹。
?
?
2. jboss会自动扫描deployments文件夹,如果想加入自己的部署文件夹,需要怎么办?
在standalone.xml找到以下节点:
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1"> <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/> </subsystem>
这个是扫描deployments文件夹的配置,然后加入我们的配置:
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1"> <deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir" path="deployments" /> <deployment-scanner name="my-external-deployment-scanner" path="/home/xxx/xxx/webapps" scan-interval="5000" /> </subsystem>
?
3. 我们知道tomcat可以直接将web应用的文件夹放入webapps进行部署,而jboss默认是不支持这样做,那想部署web应用文件夹需要怎么做?
我们可以学着jboss部署war包的方式,首先将你的文件夹命名为mvntest.war,然后手动增加一个“mvntest.war.deployed”的文件,然后将里面内容写为mvntest.war即可
?
4. 后台启动和终止
jboss standalone是前台启动,启动后关闭终端,jboss就终止了,jboss后台启动的方法:
1. nohup?./standalone.sh?&?
2. ./standalone.sh & 启动后,exit即可
?
使用前台启动ctrl+c就可关闭jboss,使用后台启动,需要使用以下命令关闭,进入bin目录:
本地:./jboss-cli.sh?--connect?command=:shutdown
远程:./jboss-cli.sh?--connect?controller=<IP>:<port>?command=:shutdown (端口为9999)
?(或者暴力解决kill -9 pid)