在 WildFly 中将 JDBC Driver 作为模块安装有啥好处

Posted

技术标签:

【中文标题】在 WildFly 中将 JDBC Driver 作为模块安装有啥好处【英文标题】:What are the advantages of installing JDBC Driver as a Module in WildFly在 WildFly 中将 JDBC Driver 作为模块安装有什么好处 【发布时间】:2015-04-25 22:47:54 【问题描述】:

link 解释了 WildFly 的新功能。在Migrating The Database Connection -> JDBC Driver 下,文章解释了为应用程序使用 jdbc 驱动程序的两种方法。我尝试将它安装为一个模块,它工作正常。问题是哪种方式更好,什么时候更好,whether deploy it as any other application package or install it as a module? (我注意到集群环境需要将其安装为模块。我正在寻找,还有其他原因吗?)

【问题讨论】:

【参考方案1】:

我认为您引用的文章的正确链接是:http://wildfly.org/news/2014/02/06/GlassFish-to-WildFly-migration/ (另外一个好像没有指向你说的那篇文章)

以下是您引用的“迁移数据库连接”部分中有趣的部分:

在 WildFly 上,您有两种安装 JDBC 驱动程序的方法: 您将其部署为任何其他应用程序包,或者将其安装为 模块。您始终可以选择部署驱动程序,但它特别 当你有一个集群环境时推荐,因为部署 在服务器组中自动传播。 如果驱动程序不是,您可能会遇到部署问题 符合 JDBC4 标准。在这种情况下,将驱动程序安装为模块 解决了这些问题。 JDBC驱动作为一个模块的好处是 为您创建自定义 WildFly 捆绑包的可能性 组织。这样,您可以重复完全相同的安装 在多台机器上,保持相同的配置。这 非常适合开发环境。

所以在本节中,作者描述了以下优势:

如果驱动程序不符合 JDBC4,您可能会遇到部署问题。在这种情况下,将驱动程序安装为模块可以解决这些问题。

以下 Wildfly documentation 也对此进行了描述:

任何符合 JDBC 4 的驱动程序都将被自动识别并按名称和版本安装到系统中。使用 Java 服务提供者机制来识别 JDBC JAR。这样的 JAR 将包含一个名为 META-INF/services/java.sql.Driver 的文本文件,其中包含该 JAR 中存在的驱动程序的类的名称。如果您的 JDBC 驱动程序 JAR 不符合 JDBC 4,则可以通过以下几种方式之一使其可部署。 (...)

因此,如果驱动程序不符合 JDBC-4 标准,将驱动程序部署为模块比将其部署为任何其他应用程序包更容易。 (因为您必须修改和重建不符合 JDBC-4 的 jar 才能将其部署为任何其他应用程序包)

【讨论】:

您能否在回答中提供更多背景和/或描述? 我更新了我的答案,解释了为什么应该使用模块而不是直接部署驱动程序。 将其安装为模块也将所需的 JDBC 实现与应用程序分开。例如,您可以升级 JDBC 驱动程序而无需重新构建应用程序。 @ozOli,我认为您误解了这个问题(正如我第一次阅读时所做的那样),因为在引用的文章中“与任何其他应用程序包一样”方法并不意味着嵌入了 JDBC 驱动程序在应用程序包中。这只是意味着您可以将其作为任何其他 .war、.jar 包直接部署到应用服务器,因此可用于数据源配置。 除此之外,我认为为了使用 XA Transactions,需要在应用服务器上安装驱动程序。

以上是关于在 WildFly 中将 JDBC Driver 作为模块安装有啥好处的主要内容,如果未能解决你的问题,请参考以下文章

"WFLYCTL0412: 未安装的必需服务:" => ["jboss.jdbc-driver.mysql"]

在循环中将数据插入 TDengine 时 jdbc 驱动程序挂起

如何在 Wildfly 中将外部属性文件加载到 Spring Boot

如何在 WildFly 10 中将爆炸战争部署为文件夹

为啥 Wildfly 10 在部署时给我“jdbc:postgresql 不允许空名称段”?

如何在wildfly 8.2 Final中将lib添加到模块中?