WildFly作为一款优秀的EJB容器,其前身为JBoss AS。JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中。假设我们现在有这样一个项目,他是以standalone的模式运行在WildFly中,且这个项目在实际产品环境中需要被部署成多个实例,每个实例都会有不同的服务对象,比如不同的国家,不同角色的用户等等。针对于不同的服务对象,在后台的配置也会有些许的不同,比如需要连接不同的数据库等。

面对这种需求,也许你首先考虑到的是我们可以为不同的服务对象编译发行不同的发布包,这样做也许很直观,但是在实际交付过程中却很难行得通。首先,不同的实例也许需要加载一些不同的配置,但是这些配置文件的名字和路径都是都是相对固定的,也就是说你如果想针对不同的实例去加载各自配置文件,你首先需要修改配置,配置文件名甚至路径等等,然后在代码中做种相应的修改去加载他们,这无形中大大的增加了了维护的开销。其次,如果一旦服务的对象很多,那么久意味着需要交付的发行包也会有许多,这无形中会增加项目发布的开销。最后,多个项目实例放在同一个WildFly的instance中,也许会遇到一些未知的问题,比如端口冲突等等,这也会潜在的增加运维的开销和程序的不稳定性。

那么有没有一种办法能在不增加开销基础上解决这个问题呢?答案就是我们可以通过在WildFly中运行多个standalone模式的实例,然后在每个实例中都运行着我们的项目,再对不同的实例里项目的配置文件进行相应的修改(比如数据库连接字符串)。这样我们仅仅关注具体配置项的差异即可,不需要修改代码,也不需要关心是否有端口冲突问题,更不需要发行多个发布包。这个solution听起来是不是很诱人呢?

在进入正题之前我假设你已经对JBoss或者WildFly已经有了一定的了解,且已经可以正确运行你机器上WildFly和你的项目。本文中,我用来演示的WildFly的版本为9.0.2.Final。

如果你的WildFly和你的项目都是okay的话,那么你的项目应该是在standalone目录中。首先我们需要把项目的服务停掉,然后拷贝standalone到任意的一个文件夹,改个名字(比如standalone1)然后再拷回WildFly的根目录当中。

这个时候你的standalone1目录中也包含了一个和standalone一样的项目,接下来我们进入standalone1目录中修改一下你所需要修改的配置文件,比如数据库连接等等。修改完毕之后我们进入WildFly的bin目录,在里面建立两个bat文件start.bat和start1.bat。然后为start.bat添加如下命令

  1. ./standalone.bat -c standalone-full.xml -Djboss.server.base.dir=./../standalone -Djboss.socket.binding.port-offset=0

同理,start1.bat文件的内容修改为

  1. ./standalone.bat -c standalone-full.xml -Djboss.server.base.dir=./../standalone1 -Djboss.socket.binding.port-offset=100

这里我们稍微解释一下这个命令:

  • ./standalone.bat这个是standalone模式的下的启动文件,不多说。
  • -c standalone-full.xml是你自定义的WildFly的配置文件(这里我们用standalone-full.xml来举例子),也不多说。
  • -Djboss.server.base.dir=./../standalone1是指定你这个WildFly的instance的根目录。
  • -Djboss.socket.binding.port-offset=100指的是你这个实例针对于WildFly标准端口的偏移量。

编辑完成先后启动着两个bat文件。

start.bat

start1.bat

从控制台上我们可以看出,两个WildFly instances的Amdin Console分别是

http://127.0.0.1:9990 和 on http://127.0.0.1:10090

由此可见端口确实有了100的偏移量。。至此我们完成了WildFly多个实例的配置, 也就变向的实现我们文中最初的那种需求。

同理我们也为不同的instance添加shutdown的命令。

  1. ./jboss-cli.bat --controller=localhost:9990 --connect --command=:shutdown
  1. ./jboss-cli.bat --controller=localhost:10090 --connect --command=:shutdown

此刻你的心情是不是非常的轻松愉快呢?

在WildFly中运行多个standalone模式的实例的更多相关文章

  1. javascript 中mediator pattern(中介者模式)一个实例demo

    <!doctype html> <html lang="en"> <head> <title>JavaScript Patterns ...

  2. Spark运行模式与Standalone模式部署

    上节中简单的介绍了Spark的一些概念还有Spark生态圈的一些情况,这里主要是介绍Spark运行模式与Spark Standalone模式的部署: Spark运行模式 在Spark中存在着多种运行模 ...

  3. Spark集群-Standalone 模式

    Spark 集群相关 table td{ width: 15% } 来源于官方, 可以理解为是官方译文, 外加一点自己的理解. 版本是2.4.4 本篇文章涉及到: 集群概述 master, worke ...

  4. 012 Spark在IDEA中打jar包,并在集群上运行(包括local模式,standalone模式,yarn模式的集群运行)

    一:打包成jar 1.修改代码 2.使用maven打包 但是目录中有中文,会出现打包错误 3.第二种方式 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.完成 二:在集群上运行(loc ...

  5. 深入理解 JBoss 7/WildFly Standalone 模式启动过程

    概述 JBoss 7/WildFly Standalone 模式启动过程大致例如以下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBo ...

  6. [转]JBoss7中domain、standalone模式介绍

    JBoss AS7 可实现为云做好准备的架构,并可使启动时间缩短十倍,提供更快的部署速度并降低内在的占用.JBoss Enterprise Application Platform 6 的核心是JBo ...

  7. spark运行模式之二:Spark的Standalone模式安装部署

    Spark运行模式 Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,目前能很好的运行在 Yarn和 Mesos 中,当然 Spark 还有自带的 Stan ...

  8. Vsftpd运行的两种模式-xinetd运行模式和 standalone模式

    vsftpd运行的两种模式-xinetd运行模式和 standalone模式 vsftpd提供了standalone和inetd(inetd或xinetd)两种运行模式. standalone一次性启 ...

  9. flink安装及standalone模式启动、idea中项目开发

    安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...

随机推荐

  1. Sql--order by、desc降序、top

    ---------通过order by 语句进行排序: --1.降序order by 列名desc --2.升序order by 列名   或order by 列名asc --3.order by语句 ...

  2. W3School-CSS 轮廓(Outline)实例

    CSS 轮廓(Outline)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内 ...

  3. JavaScript 动态插入 CSS

    写组件时有时想把一些组件特性相关的 CSS 样式封装在 JS 里,这样更内聚,改起来方便.JS 动态插入 CSS 两个步骤就可以 创建一个 style 对象 使用 stylesheet 的 inser ...

  4. spring的路径通配符

    Spring提供了强大的Ant模式通配符匹配,从同一个路径能匹配一批资源. Ant路径通配符支持"?"."*"."**",注意通配符匹配不包 ...

  5. window 和 linux 环境下杀死tomcat进程——也可以解决其他端口被占用的问题

    1.应用场景 在Windows或者linux操作系统中,我们在启动一个tomcat服务器时,经常会发现8080端口已经被占用的错误,而我们又不知道如何停止这个tomcat服务器. 2.window环境 ...

  6. [WPF系列]-Prism+EF

      源码:Prism5_Tutorial   参考文档 Data Validation in WPF √ WPF 4.5 – ASYNCHRONOUS VALIDATION Reusable asyn ...

  7. MVC架构学习之Smarty学习——病来而蔫

    前两天是五一小长假,而每次假期都想着如何如何刻苦一番,往往是自作多情.. 当然这次是有小病在身,多个借口吧. 一有病就蔫的不行...要锻炼了啊,脚估计也差不多了,游泳试试吧这周. 这次学习Smarty ...

  8. AngularJS笔记---作用域和控制器

    什么是作用域. 什么是控制器, 作用域包含了渲染视图时所需的功能和数据,它是所有视图的唯一源头.可以将作用域理解成试图模型(ViewModel). 作用域之间可以是包含关系也可以是独立关系.可以通过设 ...

  9. TCP的连接控制

    TCP的三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 确认号ack:期待收到对方下一个报文段的第一个数据字节的序号. ...

  10. 用于灰度变换的一些实用的M函数

    关于MATLAB中如何对错误处理进行编程,先介绍一些东西: 函数nargin可以检测输入到M函数的参数的数目: 函数nargout可以检测M函数的输出: 函数nargchk能够在M函数体中检测传递的参 ...