WildFly Swarm:使用 Java EE 构建微服务

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

法国作家 安托万·德·圣埃克苏佩里 的这句话是为了证实通常少即是多。对于建筑师、艺术家、设计师、作家、跑步者、软件开发人员或任何其他职业来说都是如此。简单、极简主义和减少垃圾总是有很长的路要走,并且有几个优点,而不是臃肿的东西。

什么是野蝇群?

WildFly 是一个轻量级、灵活、功能丰富、符合 Java EE 7 的应用程序服务器。 WildFly 9 甚至引入了一个 27MB 的 Servlet-only 发行版 。这些非常适合您的企业和 Web 应用程序。

WildFly Swarm 的得分更高一些。从 公告


WildFly Swarm 是一个支持 WildFly 9.x 的新 sidecar 项目,可以解构 WildFly AS 并将其粘贴回您的应用程序中,以创建一个独立的可执行 jar。

野蝇群

Java EE 应用程序的典型应用程序开发模型是创建 EAR 或 WAR 存档并将其部署在应用程序服务器中。所有依赖项(例如 Java EE 实现)都打包在应用程序服务器中,并提供应用程序类所需的功能。可以部署多个存档,它们都共享相同的库。这是一个很好理解的模型,并且在过去几年中一直在使用。

WildFly Swarm 改变了局面,它创建了一个“fat jar”,将所有依赖项打包在一个 JAR 文件中。这包括 WildFly 的极简版本、任何必需的依赖项,当然还有应用程序代码本身。该应用程序可以简单地使用 java -jar 运行。

每个 fat jar 都可能是一个微服务,然后可以独立升级、替换或扩展。每个 fat jar 通常都遵循单一职责原则,因此只会打包所需的依赖项。每个 JAR 都可以使用多语言持久性,并且只使用所需的持久性机制。

给我看代码!

通过添加 Maven 依赖项和插件,可以将 Java EE 应用程序打包为 WildFly Swarm fat jar。 github.com/arun-gupta/wildfly-samples/tree/master/swarm 提供了一个简单 JAX-RS 示例的完整源代码。

WildFly Swarm Maven 依赖

pom.xml 中添加以下 Maven 依赖项:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

WildFly Swarm Maven 插件

pom.xml 中添加以下 Maven 插件:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

创建 WildFly Swarm Fat Jar

可以通过调用标准 Maven 目标轻松创建 fat jar:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

这会使用通常的 Maven 约定生成一个 JAR 文件,并在末尾附加 -swarm 我们示例 中生成的 WAR 文件名为 swarm-1.0-SNAPSHOT-swarm.jar

生成的 WAR 文件约为 30MB,有 134 个 JAR(全部在 m2repo 目录中)和 211 个类。应用程序代码捆绑在 app/swarm-1.0-SNAPSHOT.war 中。

运行 WildFly Swarm Fat Jar

这个 far jar 可以运行为:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

响应可以验证为:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

WildFly Swarm Release 博客 引用了很多关于 Servlet JAX-RS with ShrinkWrap DataSource via Deployment Messaging 和 JAX-RS 等的博客。

WildFly Swarm 后续步骤

这只是 1.0.0.Alpha1 版本,所以请随时试用示例并通过 提交问题 向我们提供反馈。

您拥有所有 WildFly 子系统的强大功能,甚至可以创建可嵌入的 Java EE 容器,如 发布博客 所示:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

后续博客将展示如何使用 WildFly Swarm 轻松创建微服务。

WildFly Swarm 保持联系

您可以通过 WildFly HipChat 聊天室、 Twitter 上的@wildflyswarm 或通过 GitHub Issues 了解该项目。