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

在上一篇文章中,我描述了如何使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java调用跟踪系统_Tracer:在分布式系统中的调用跟踪和日志相关

Tracer: Distributed system tracingTracer noun, /ˈtɹeɪsɚ/: A round of ammunition that contains a flammable substance that produces a visible trail when fired in the dark.Tracer is a library that manages custom trace identifiers and carries them through …

java 垃圾回收手动回收_Java垃圾回收(3)

java 垃圾回收手动回收接下来是我的前两篇垃圾收集博客文章&#xff1a; GC热点概述 。 并行垃圾收集器 。 并发标记扫描 Hotspot中的并行垃圾收集器旨在最大程度地减少应用程序进行垃圾收集所花费的时间&#xff0c;这称为吞吐量 。 对于所有应用程序而言&#xff0c;这并不…

java测试netty_《Netty官方文档》基准测试

原文链接 译者&#xff1a;lijunshuNetty有一个模块叫’netty-microbench’&#xff0c;我们可以用他来执行一系列的微型基准测试。Netty-microbench是基于OpenJDK JMH构件的(HotSpot的推荐基准测试方案)。当你开始netty基准测试时&#xff0c;你不需要额外的依赖。运行基准测…

Java命令行界面(第30部分):观察

这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成&#xff0c;涵盖了28个不同的开放源代码库&#xff0c;可用于解析Java命令行参数。 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点&#xff0c;并提供了一些一般性的考虑&#xff0c;以便在选择2…

java导出excel 科学计数法_基于Java将Excel科学计数法解析成数字

需要注意的是一般的科学表达式是1.8E12 1.8E-12而在Excel中的科学表达式是1.8E12 1.8E-12我写的科学计数法的正则表达式是(-?\d\.?\d*)[Ee]{1}[\-]?[0-9]*导入EXCEL数据时将科学计数法解析成数字&#xff0c;Java代码&#xff1a;import java.text.DecimalFormat;import jav…

java描边_shape描边设置是否显示四周描边

android:width"1pt"/>android:topRightRadius"30pt"android:bottomRightRadius"30pt" />效果图如下&#xff1a;这里设置了左边描边不显示设置虚线&#xff1a;android:shape"line">android:dashGap"3pt"android:d…

java 垃圾回收手动回收_Java垃圾回收(2)

java 垃圾回收手动回收并行清理 今天&#xff0c;我们介绍了并行GC的工作原理。 具体来说&#xff0c;这是在Eden上运行并行Scavenge收集器&#xff0c;在Tenured一代上运行Parallel Mark and Sweep收集器的组合。 您可以通过传递-XX&#xff1a; UseParallelOldGC来获得此选项…

java正则表达式性能_译:Java 中的正则表达式性能概述

译者&#xff1a;Darren Luo1. 概述在本快速教程中&#xff0c;我们将展示模式匹配引擎是如何工作的。我们还将介绍在 Java 中优化正则表达式的不同方式。有关正则表达式的的使用介绍&#xff0c;请参阅此文。2. 模式匹配引擎java.util.regex 包使用了一种叫做 Nondeterministi…

带注释的控制器– Spring Web / Webflux和测试

Spring Webflux和Spring Web是两个完全不同的Web堆栈。 但是&#xff0c; Spring Webflux继续支持基于注释的编程模型 使用这两个堆栈定义的端点可能看起来相似&#xff0c;但是测试该端点的方式却大不相同&#xff0c;并且编写此端点的用户必须知道哪个堆栈处于活动状态并相应…

jquery解析java对象数组_Javascript / jQuery初学者:将对象推送到数组

Well you are changing the reference of same object通过示例了解它是如何工作的let a {};let b a;a.name xyz;a.name abc;console.log(a.name)console.log(b.name)所以在上面的示例中我们有两个变量a和b . a是一个对象 .每当我们更新名称时&#xff0c;最后一个值将被新的…

java查看jvm对象个数_jmap-查看 jvm 内存对象信息

jmap 概述命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件&#xff0c;也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。参数option&#xff1a;选项参数。pid&#xff1a;需要打印配置信息的进程ID。executable&#xff1a;产…

OpenHub框架进行的异步通信

在本系列的前一部分中&#xff0c;我们介绍了OpenHub框架 。 这部分显示了框架最强大的功能之一- 异步消息传递模型 。 当源系统无法等待目标系统的响应时&#xff0c;将使用系统之间的异步通信。 有以下几个原因&#xff1a; 源系统必须尽可能地响应 &#xff0c;并且不受外…

Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,

引用来自“雨翔河”的评论获取国家假日办的的信息&#xff0c;然后根据假日办提供的信息来搞定。日期的话&#xff0c;哈哈&#xff0c;找个提供日期查询的接口&#xff0c;借用一下来查日期&#xff0c;也搞定了。总之哪里有的抄就抄哪里的。再来一个笨蛋的意见&#xff0c;把…

java注解的反射_Java注解与反射

概要本文主要是总结Java注解与反射的相关知识&#xff0c;加深自己对Java类动态语言的理解&#xff0c;同时为日后学习Spring打下基础。注解&#xff1a;什么是注解Annotation的作用不是程序本身&#xff0c;但是可以对程序作出解释。可以被其他程序(比如&#xff1a;编译器等)…

工厂设计模式和策略设计模式_设计模式:策略

工厂设计模式和策略设计模式这次我想谈谈策略设计模式 。 通过这种方式&#xff0c;我开始撰写有关行为设计模式的文章。 这种模式表示对象之间的某些交互模式&#xff0c;以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。 当您的应用程序中有多个实现目的…

java 8 排序反转_Java 8 排序小结

1、概述首先&#xff0c;让我们先定义一个简单的实体类&#xff1a;Datapublic class Human {private String name;private int age;public Human() {super();}public Human(final String name, final int age) {super();this.name name;this.age age;}}2、不使用Lambda表达式…

如何将不带web.xml的Spring应用程序部署到Tomcat

介绍 由于Servlet 3规范不再需要web.xml来配置Web应用程序&#xff0c;因此已通过使用注释代替。 在本文中&#xff0c;我们将研究如何在不使用web.xml情况下将简单的基于Spring的应用程序部署到Tomcat 8.5。*。 创建一个空的应用程序 使用以下命令使用maven webapp原型创建一…

java创建单线程计时器_我们如何在Java中实现计时器线程?

该定时器类计划任务一次或多次给定的时间运行。它也可以作为后台程序线程在后台运行。要将Timer与守护程序线程相关联&#xff0c;有一个带有布尔值的构造函数。计时器以固定的延迟和固定的速率安排任务。在固定的延迟中&#xff0c;如果系统GC延迟了任何执行&#xff0c;则其他…

Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

资源介绍课程简介:xa0xa0Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频----------------------课程目录Python项目实战篇[初级项目&#xff1a;图片社交电商导购漂流瓶]项目实现功能&#xff1a; 用户注册&#xff0c;登录&#xff0c;登出图片的多种…

java04376_Java - jdbc mybatis

jdbc首先配置maven包org.springframework.bootspring-boot-starter-jdbcorg.mybatis.spring.bootmybatis-spring-boot-starter2.1.0注意pom.xml中配置结点src/main/java**/*.xmlfalsesrc/main/resourcesstatic/*.*templates/*.***/*.xml**/*.yml**/*.propertiesfalse针对不同的…