在上一篇文章中,我描述了如何使用OpenLiberty和maven作为独立服务器或maven构建的一部分来启动服务器,以及如何创建fatjar包。

在这篇文章中,我正在研究如何使用Wildfly群。 我仍在尝试使MicroProfile在Wildfly full上运行,因此,到目前为止,该示例与OpenLiberty示例的工作方式不同。

我使用的是同一个示例项目 ,其中包含更多的maven配置文件以运行不同的部署选项。

(请参阅https://github.com/phillip-kruger/javaee-servers-parent )

示例项目

我想包含一些MicroProfile功能,因此这是一个“每日报价”应用程序,而不是基本的“ Hello world”。 我的应用程序使用工厂加载报价提供程序(目前只有一个)。 当前提供者从forismatic.com获得报价。 我使用MicroProfile Configuration API配置诸如URL和要加载的提供程序之类的东西。 我使用MicroProfile Fault Tolerance API来确保在提供程序源不可用时我们能够生存。

您可以在此处获取完整的示例项目: https : //github.com/phillip-kruger/quote-service

作为Maven构建的一部分运行

您可以使用wildfly-swarm-plugin运行( mvn wildfly-swarm:run )作为构建一部分的wildfly swarm实例。 该插件将执行“分数检测”,这意味着它将查看您需要的应​​用服务器的哪些部分,并且仅创建包含这些分数的部署。 因此,您仍然可以将伞状API包含在依赖关系中,并针对这些依赖关系进行编码,但是在部署时,您将获得正确的大小分布。 好酷!

<dependencies><!-- Java EE --><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>${java-ee.version}</version><scope>provided</scope></dependency><!-- MicroProfile --><dependency><groupId>org.eclipse.microprofile</groupId><artifactId>microprofile</artifactId><version>${microProfile.version}</version><type>pom</type><scope>provided</scope></dependency></dependencies>

在包含引用webjars的 HTML文件时,我总是使用过滤,但是似乎插件在应用过滤器之前使用了原始源文件,因此我不得不寻找一种替代方法。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.0.0</version><configuration><webResources><resource><directory>${basedir}/src/main/webapp</directory><filtering>true</filtering><includes><include>**/*.css</include><include>**/*.jsp</include></includes></resource></webResources></configuration></plugin>

在此示例中,我使用语义UI来构建显示当天报价的网页:

我将maven属性用于HTML中CSS和JS版本,并且在构建时需要用实际值替换它们:

<link rel="stylesheet" type="text/css" href="webjars/semantic-ui/${semantic-ui.version}/dist/semantic.min.css"><script type="text/javascript" src="webjars/jquery/${jquery.version}/dist/jquery.min.js" /><script type="text/javascript" src="webjars/semantic-ui/${semantic-ui.version}/dist/semantic.min.js"></script>

作为替代,我使用包目标,然后使用exec-maven-plugin运行jar。

这也使我可以传递standalone.xml进行任何其他配置:

<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><executions><execution><id>1</id><phase>pre-integration-test</phase><goals><goal>package</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.6.0</version><executions><execution><id>1</id><phase>post-integration-test</phase><goals><goal>exec</goal></goals></execution></executions><configuration><executable>java</executable><arguments><argument>-jar</argument><argument>${project.build.directory}${file.separator}${project.artifactId}-swarm.jar</argument><argument>-c</argument><argument>${project.build.directory}${file.separator}standalone.xml</argument></arguments></configuration></plugin>

在我的情况下, standalone.xml仅包含日志记录配置,但是您现在可以包括任何其他配置。

<server xmlns="urn:jboss:domain:4.0"><profile><subsystem xmlns="urn:jboss:domain:logging:3.0"><periodic-rotating-file-handler name="FILE" autoflush="true"><file path="${wildfly-swarm.logfile}"/><suffix value=".yyyy-MM-dd"/><append value="true"/></periodic-rotating-file-handler><root-logger><level name="INFO"/><handlers><handler name="FILE"/></handlers></root-logger><logger category="${log.name}"><level name="${log.level}"/></logger></subsystem></profile></server>

因此,在qoute-service示例中,您可以执行此操作(与OpenLiberty示例相同):

mvn clean install -P wildfly-swarm-fatjar

Hollowjar

Wildfly群可让您创建空心罐。 (请参阅本文 )也就是说,没有应用程序的胖子,仅仅是应用程序服务器的一部分。 然后,您可以将应用程序作为命令行输入提供:

java -jar myapp-hollow-swarm.jar myapp.war

因此,如果我们能找到一种方法来重新加载应用程序部分,那么我们可以拥有与完整应用程序相同的开发模型(热部署)。

部署扫描器

Wildfly群有一个称为Deployment Scanner的部分,您可以将其包含在您的发行版中(胖或空心)。

分数检测将不会自动检测到此(因为在代码中没有对此的引用)。 幸运的是,您可以在Maven中定义其他分数:

<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><executions><execution><phase>pre-integration-test</phase><goals><goal>package</goal></goals></execution></executions><configuration><hollow>true</hollow><additionalFractions>scanner</additionalFractions></configuration></plugin>

为了使扫描程序工作,将其添加到standalone.xml

<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0"><deployment-scanner scan-enabled="true"scan-interval="5000" path="/tmp/quote-service/wildfly-swarm/deployments" name="quote-service" auto-deploy-xml="false"/> </subsystem>

如果现在将应用程序的更新版本移至定义的路径,则可以进行热部署。

在引用示例中,这意味着您可以:

  • mvn clean install -P wildfly-swarm-start(启动服务器)
  • mvn clean install -P wildfly-swarm-deploy(热部署到正在运行的服务器)
  • mvn clean install -P wildfly-swarm-stop(停止正在运行的服务器)

您还可以创建一个胖子:

  • mvn全新安装-P软件包

节约时间

建立和启动胖子大约需要10秒钟 。 热部署大约需要2.7秒
这节省了大量时间,从而使更改之间的周转时间更快。

翻译自: https://www.javacodegeeks.com/2018/01/hollowjars-deployment-scanner-wildfly-swarm-cool.html

Hollowjars,部署扫描程序以及Wildfly群体为何很棒相关推荐

  1. 认为 MacBook Pro 的 Touch Bar 毫无意义?这 4 个应用程序让它变得很棒

    自从 Apple 向全世界推出 Touch Bar 已经快三年了,它仍在寻找一个目标.虽然它并不比它取代的功能键差,但 Apple 确实在努力帮助它发挥其潜力,使其成为拥有 MacBook Pro 的 ...

  2. 极客时间程序员的数学基础课_针对程序员和极客的10个很棒的礼物创意

    极客时间程序员的数学基础课 假期给程序员朋友和家人的一些礼物提示以及购买链接. 照片由freestocks.org在Unsplash上拍摄 大家好,又是一年中的某个时候,我们喜欢与家人和朋友共度时光, ...

  3. nmap扫描ipv6端口_Flan Scan:Cloudflare开源的轻量级网络漏洞扫描程序

    日前,Cloudflare宣布开源其内部的轻型网络漏洞扫描工具Flan Scan.Flan Scan是一款基于Nmap打包的Python漏洞扫描程序.基于Nmap的开源强大,灵活性,Cloudflar ...

  4. 使用Python+OpenCV构建文档扫描程序

    首先给各位展示原始图片: 使用自己搭建的文档扫描程序扫描效果如下图: 图一:查找轮廓 图二:边缘检测 图三:应用透视变换和阈值

  5. weblogic服务器部署的程序,如何直接通过IP访问(即URL中去掉工程名)

    用weblogic部署的程序,怎么能够直接通过IP访问呢? 下面就是了 打开你的工程,看看webroot下的WEB-INF中有没有一个weblogic.xml文件. 1.如果没有,自己建一个,里面写上 ...

  6. 基本完成了一个SEGY扫描程序

    利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...

  7. 原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序

    近身边的很多同学都在学习原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序.由于问的人多,所以我也写了个心得,分享一下,老鸟别喷我哈.先贴上代码吧: //返回值: //0,没有任何按键按 ...

  8. 爬虫实战:CentOS安装JDK,部署Java程序,利用screen使其保持在前台运行

    一.CentOS 7 yum 安装与配置 JDK 参考:https://blog.csdn.net/github_38336924/article/details/82221258 1.检查是否已安装 ...

  9. Linux部署web程序

    1.   创建ucenter用户 一般情况下,发布应用程序都不是使用root用户的,需要创建一个普通用户来发布程序: 创建ucenter用户: useradd -d /ucenter ucenter ...

最新文章

  1. 到底什么是生成式对抗网络GAN?
  2. 从事安卓开发6年,我都有哪些收获?
  3. 360脱口秀:‘未来属于虚拟’开播啦!
  4. 怎么在大学当院系负责人呢?一个case study
  5. Spring学习总结二
  6. 光流 | 金字塔迭代(Iterative Pyramidal)LK光流算法(Matlab源代码)
  7. Django从理论到实战(part49)--ModelForm
  8. 顺序写磁盘比随机写内存_深入理解 linux磁盘顺序写、随机写
  9. Python多任务——线程
  10. linux vi 复制一个单词_vi或vim的快速操作技巧你知道吗?
  11. Redis 和 memcached 区别(二)
  12. QT调用OpenCV
  13. matlab plot函数详解
  14. 网易游戏移动端开发暑期实习提前批总结
  15. 本科课程【数据结构与算法】实验1——线性表的顺序表示及插入、删除操作(C++实现)
  16. A First Course in Database Systems(数据库基础教程 第三版)课后答案——2.3.1\2.3.2\2.4.1
  17. 有序列表和无序列表的不同类型
  18. VIVADO调用MIG产生DDR3时实例化遇到的问题以及解决方法
  19. 家里想养花了(持续更新)
  20. 怎么卸载apowerrec_录屏王ApowerREC Mac版卸载后,如何彻底删除Apowersoft Audio Device声音设备?...

热门文章

  1. 17、java中的集合(4)
  2. Sentinel(十八)之注解支持
  3. Vue.js2.0开发环境搭建(一)
  4. 【Python】有效资源爬取并集
  5. java 为文件及文件夹添加权限
  6. 每日top3热点搜索词统计案例
  7. Java:出生日期转年龄
  8. mysql sample函数_Oracle SAMPLE 语法应用
  9. internet地址java表示
  10. 转: 深入浅出-网络七层模型