wildfly 21中应用程序的部署
简介
除了配置文件的修改之外,最重要的就是应用程序的部署了。本文将会讲解如何在wildfly 21中,在Managed Domain和standalone两种模式中如何部署应用程序。
Managed Domain中的部署
在managed domain模式下,服务是放在很多个server中启动的,而server是和server-group相关联的。同一个server-group下的server部署是一致的。
在managed domain模式下,需要先将要部署的应用程序上传到domain controller中,然后通过domain controller将其部署到一个或者多个server-group中。
当然我们在domain controller中的cli环境中只需要一个deploy命令就可以做到上面的两步了。
比如说,我们创建了一个应用程序叫做test-application.war,看下怎么进行部署:
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war
Either --all-server-groups or --server-groups must be specified.
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups
'test-application.war' deployed successfully.
在执行deploy命令的时候,需要指定部署到的server-groups名字,可以部署到所有的server-groups中,也可以指定特定的某些server-groups:
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --server-groups=main-server-group,another-group
'test-application.war' deployed successfully.
部署完成之后,我们可以通过cli来查看一下部署的状态:
[domain@localhost:9990 /] /server-group=main-server-group/deployment=test-application.war:read-resource(include-runtime)
{
"outcome" => "success",
"result" => {
"enabled" => true,
"name" => "test-application.war",
"managed" => true,
"runtime-name" => "test-application.war"
}
}
deploy可以添加--force参数,用来升级或者替换现有的程序版本:
[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups --force
'test-application.war' deployed successfully.
如果想取消部署,则可以使用undeploy:
[domain@localhost:9990 /] undeploy test-application.war --all-relevant-server-groups
Successfully undeployed test-application.war.
[domain@localhost:9990 /] /server-group=main-server-group:read-children-names(child-type=deployment)
{
"outcome" => "success",
"result" => []
}
部署完成之后,会在domain.xml中添加或者修改两个部分的内容,分别是deployments和server-groups:
[...]
<deployments>
<deployment name="test-application.war"
runtime-name="test-application.war">
<content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
</deployment>
</deployments>
[...]
<server-groups>
<server-group name="main-server-group" profile="default">
[...]
<deployments>
<deployment name="test-application.war" runtime-name="test-application.war"/>
</deployments>
</server-group>
</server-groups>
[...]
管理展开的部署文件
一般来说,如果我们要创建或者修改一个应用程序的部署文件的话,我们可以重新打包这个部署文件,然后重新部署即可。
但是有时候,重新打包整个应用程序可能比较复杂,而我们只是想修改程序中的某一个或者某几个特定的文件。那么wildfly提供了命令行方便的实现这个功能。
要修改打包好的部署文件,首先就是要将部署文件展开。因为部署文件一般都是以ear,war结尾的,展开的目的就是将其进行解压缩,以便我们可以修改包里面的内容。
比如说我们现在已经部署好了一个kitchensink.ear文件,现在可以使用下面的命令将其展开:
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode()
因为上面的展开命令并不是递归执行的,如果ear中包含子的部署系统war文件的话,我们可以使用path来指定展开的子系统:
[domain@localhost:9990 /] /deployment=kitchensink.ear:explode(path=wildfly-kitchensink-ear-web.war)
展开部署文件之后,我们可以使用browse-content来查看文件的列表:
[domain@localhost:9990 /] /deployment=kitchensink.ear:browse-content(archive=false, path=wildfly-kitchensink-ear-web.war)
{
"outcome" => "success",
"result" => [
{
"path" => "META-INF/",
"directory" => true
},
{
"path" => "META-INF/MANIFEST.MF",
"directory" => false,
"file-size" => 128L
},
...
}
如果想查看具体某个文件的描述,则可以使用read-content:
[domain@localhost:9990 /] /deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
{
"outcome" => "success",
"result" => {"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32"},
"response-headers" => {"attached-streams" => [{
"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32",
"mime-type" => "text/plain"
}]}
}
注意,read-content只能读取到文件的描述符,并不能获取到文件的内容,如果想要读取文件的内容,可以使用attachment display :
[domain@localhost:9990 /] attachment display --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
ATTACHMENT d052340a-abb7-4a66-aa24-4eeeb6b256be:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: mjurc
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_91
使用attachment save命令还可以将部署文件的内容拷贝到指定的文件目录中:
[domain@localhost:9990 /] attachment save --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF) --file=/tmp/example
File saved to /tmp/example
我们可以使用add操作来创建一个空的展开部署文件:
[domain@localhost:9990 /] /deployment=exploded.war:add(content=[{empty=true}])
然后使用add-content向其中添加文件:
[domain@localhost:9990 /] /deployment=exploded.war:add-content(content=[{target-path=WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, input-stream-index=/home/demo/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class}, {target-path=META-INF/MANIFEST.MF, input-stream-index=/home/demo/META-INF/MANIFEST.MF}, {target-path=META-INF/services/org.jboss.msc.service.ServiceActivator, input-stream-index=/home/demo/META-INF/services/org.jboss.msc.service.ServiceActivator}])
或者使用remove-content删除其中的文件:
[domain@localhost:9990 /] /deployment=exploded.war:remove-content(paths=[WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, META-INF/MANIFEST.MF, META-INF/services/org.jboss.msc.service.ServiceActivator])
非常的方便。
standalone模式下的部署
standalone模式下的部署和domain模式下的部署其实是差不多的,只不过standalone模式下没有server group的概念,我们看下怎么部署和反部署:
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war
'test-application.war' deployed successfully.
[standalone@localhost:9990 /] undeploy test-application.war
Successfully undeployed test-application.war.
standalone模式下的自动部署
手动部署比较麻烦,需要手动输入命令才能完成部署,如果系统中已经存在了deployment-scanner这个subsystem的话,那么这个scanner会定时去扫描standalone/deployments中的文件,从而完成自动部署的工作。
注意,在生产环境下,并不鼓励使用scanner去完成部署工作。
我们可以在standalone.xml中对deployment-scanner进行更加具体的配置:
<deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir"
path="deployments" auto-deploy-zipped="true" auto-deploy-exploded="false"/>
Marker Files
Marker Files是和部署文件同名的文件,只不过在部署文件后面加上了一些后缀,比如:.dodeploy,.skipdeploy,.isdeploying,.deployed等等。
其中比较重要的是.dodeploy和.deployed,我们可以手动创建或者删除这些文件,来控制系统的部署工作。
比如,我们的部署文件叫做example.war,那么我们可以通过:
cp target/example.war/ $JBOSS_HOME/standalone/deployments
touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
来手动部署example.war文件。
还可以通过删除.deployed来反部署应用程序。
rm $JBOSS_HOME/standalone/deployments/example.war.deployed
如果$JBOSS_HOME/standalone/deployments/example.war.undeployed出现了,就表现系统反部署成功了。
受管理的和不受管理的部署
wildfly支持两种部署模式,受管理的和不受管理的部署。
所谓不受管理的部署就是说,用户自行提供要部署的文件路径,系统直接去读取该路径上的文件。
而受管理的部署会把要部署的文件上传到内部的仓库中,然后使用这个仓库中的内容进行后面的部署操作。
仓库文件目录是standalone/data/content或者domain/data/content,我们看下仓库的文件格式:
ls domain/data/content/
|---/47
|-----95cc29338b5049e238941231b36b3946952991
|---/dd
|-----a9881fa7811b22f1424b4c5acccb13c71202bd
我们看一个部署文件的描述:
<deployments>
<deployment name="test-application.war"
runtime-name="test-application.war">
<content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/>
</deployment>
</deployments>
可以看到上面列出了部署文件的名字和sha1编码。WildFly主要通过这个sha1的编码去找到存储的文件。
默认情况下,我们使用deploy命令部署的是受管理的应用,我们可以通过添加--unmanaged来部署非受管理的应用:
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war --unmanaged
'test-application.war' deployed successfully.
这样将会存储文件的绝对路径在配置文件中,并且也不会去计算文件的hash值。
反部署应用都是一样的命令:
[standalone@localhost:9990 /] undeploy test-application.war
Successfully undeployed test-application.war.
部署覆盖
有时候我们需要修改部署好的应用程序中的某些文件,除了可以解压应用程序之外,还可以使用deployment-overlay命令:
deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --redeploy-affected
总结
wildfly的两种模式的部署就讲到这里,大家可以根据需要自行选择。
本文作者:flydean程序那些事
本文链接:http://www.flydean.com/wildfly-app-deployment/
本文来源:flydean的博客
欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
wildfly 21中应用程序的部署的更多相关文章
- 在wildfly 21中搭建cluster集群
目录 简介 下载软件和相关组件 配置domain 创建应用程序 部署应用程序 集群配置 总结 简介 wildfly是一个非常强大的工具,我们可以轻松的使用wildfly部署应用程序,更为强大的是,wi ...
- Linux中java应用程序的部署,使其开机自动启动
初步需求:将在Windows/MyEclipse中开发的java应用程序部署到Linux服务器上,使其运行 针对需求,可以参考下面这些文章,但是这些文章很多东西没有提及到,我自己尝试部署运行 在lin ...
- VS2012 QT程序打包部署详解
1.设置安装程序集 InstallShield安装完成后,执行以下步骤右键解决方案-->添加-->新建项目-->其他项目类型-->安装和部署,具体操作如下图: 2.发布程序 在 ...
- wildfly 21的配置文件和资源管理
目录 简介 wildfly的配置文件 extensions profile path interface socket-binding management 资源管理 总结 简介 在上一篇文章我们介绍 ...
- 【转】VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- [转载]VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- (转) VS2012程序打包部署详解
程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因微软没有将打包工具集成在开发环境中,但是我知道总会有解决办法的. 经过翻阅资料发现 ...
- 用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题
https://msdn.microsoft.com/zh-cn/library/ee942158(v=vs.110).aspx#can_i_exclude_specific_files_or_fol ...
随机推荐
- Java基础教程——泛型
泛型 Generics:泛型,愿意指"无商标的". 泛型,可以理解为"宽泛的数据类型",就是将类型由原来的具体的类型泛化. 泛型在建立对象时不指定类中属性的具体 ...
- Ajax Status(状态码) & readyState()
Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...
- 论如何优雅的抛出SpringBoot注解的异常
平时我们在写代码的时候肯定要进行很多参数验证,最开始的时候我们一般都是这样处理的 如下图 看起来好像也没什么,但是 如果参数多了呢?你就会看到这样的校验 OMG!!! 有没有感觉稍微有点视觉 ...
- Appium之测试微信小程序
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:Oschina.云+社区.知乎等各大平台都有. 目录 一.往期回顾 二.测试微信小程序 1.准备工作 2.操作步骤 3.注意 4.强制设置安卓的进程 ...
- Spring Cloud 学习 (八) Spring Boot Admin
Spring Boot Admin 用于管理和监控一个或者多个 Spring Boot 程序 新建 spring-boot-admin-server pom <parent> <ar ...
- 第15.47节、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Graphics V ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的ButtonRole详解
一.引言 在Designer中创建的QDialogButtonBox对应的Button,都有指定的ButtonRole,而我们创建自定义的Button加入到QDialogButtonBox中去时,也需 ...
- web安全~文件包含总结
文章来自freebuf,作者总结的很好,所以拿来做笔记用!!! 0×01 文件包含简介 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大 ...
- rsync+inotify-tools实时备份脚本
1.1 实时备份 1.需求分析: 为什么要实时复制 因为nfs是单点非常的不安全 而通过定时任务备份会造成数据丢失 这是就需要需要实时备份 2实时方案 1).搭建好服务端backup与客户端nfs的 ...
- Flask开发技巧之参数校验
Flask开发技巧之参数校验 目录 Flask开发技巧之参数校验 1.请求参数分类 2.解决方案使用到的库 3.针对url查询参数与一般json格式 4.针对复杂json格式数据 本人平时开发中使用的 ...