12.2. JDBC 驱动程序
在 JBoss EAP 中定义数据源以供您的应用使用之前,必须先安装相应的 JDBC 驱动程序。
12.2.1. 将 JDBC 驱动程序作为核心模块安装
若要将 JDBC 驱动程序作为核心模块安装,您必须首先 将 JDBC 驱动程序添加为核心模块,然后在 datasources
子系统中 注册 JDBC 驱动程序。
12.2.1.1. 将 JDBC 驱动程序添加为核心模块
JDBC 驱动程序可以作为核心模块安装,使用管理 CLI 可以执行下列步骤:
下载 JDBC 驱动程序。
从您的数据库供应商下载适当的 JDBC 驱动程序。有关常见 数据库的 JDBC 驱动程序的标准 下载位置,请参阅 JDBC 驱动程序下载位置。
如果 JDBC 驱动程序 JAR 文件包含在 ZIP 或 TAR 存档中,请确保提取存档。
- 启动 JBoss EAP 服务器。
启动管理 CLI。
$ EAP_HOME/bin/jboss-cli.sh
使用
模块 add
management CLI 命令,添加新的核心模块。[disconnected /] module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES
示例
以下命令添加 MySQL JDBC 驱动程序模块:
[disconnected /] module add --name=com.mysql --resources=/path/to/mysql-connector-java-8.0.12.jar --dependencies=javax.transaction.api,sun.jdk,ibm.jdk,javaee.api,javax.api
示例
要启动管理 CLI 并在一个步骤中添加新的核心模块,请使用以下命令:
$ EAP_HOME/bin/jboss-cli.sh --command="module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES"
重要使用
模块
管理 CLI 命令添加和删除模块,仅作为技术预览提供。此命令不适合在受管域中使用,或在远程连接管理 CLI 时使用。在生产环境中,应当手动 添加 和删除 模块。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
执行
模块 --help
获取关于使用此命令添加和删除模块的更多详细信息。
接下来,您必须将它注册为 JDBC 驱动程序,供应用数据源引用。
12.2.1.2. 注册 JDBC 驱动程序
驱动程序 作为核心模块安装 之后,您必须使用以下管理 CLI 命令将它注册为 JDBC 驱动程序:在受管域中运行时,请确保在此命令前加上 /profile=PROFILE_NAME
。
/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
只有 JDBC 驱动程序 jar 在
参数。
/META-INF/services/java.sql.Driver 文件中定义了多个类,才需要 driver-
class-name
例如,MySQL 5.1.36 JDBC 驱动程序 JAR 中的 /META-INF/services/java.sql.Driver
文件定义了两个类:
- com.mysql.cj.jdbc.Driver
- com.mysql.fabric.jdbc.FabricMySQLDriver
在本例中,您将传递 driver-class-name=com.mysql.cj.jdbc.Driver
。
例如,以下命令注册了 MySQL JDBC 驱动程序:
/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource, driver-class-name=com.mysql.cj.jdbc.Driver)
JDBC 驱动程序现在可供应用数据源引用。
12.2.2. 将 JDBC 驱动程序安装为 JAR 部署
JDBC 驱动程序可以使用管理 CLI 或管理控制台作为 JAR 部署进行安装。只要驱动程序符合 JDBC 4 规范,部署时将自动识别并作为 JDBC 驱动程序安装。
下列步骤介绍了如何使用管理 CLI 安装 JDBC 驱动程序。
JDBC 驱动程序的建议安装方法是将它们安装 为核心模块。
下载 JDBC 驱动程序。
从您的数据库供应商下载适当的 JDBC 驱动程序。有关常见 数据库的 JDBC 驱动程序的标准 下载位置,请参阅 JDBC 驱动程序下载位置。
如果 JDBC 驱动程序 JAR 文件包含在 ZIP 或 TAR 存档中,请确保提取存档。
- 如果 JDBC 驱动程序不兼容 JDBC 4,请参阅 将 JDBC 驱动程序 JAR 更新为 JDBC 4-Compliant 的步骤。
将 JAR 部署到 JBoss EAP.
deploy PATH_TO_JDBC_JAR
注意在受管域中,指定适当的服务器组。
例如,以下命令将部署 MySQL JDBC 驱动程序:
deploy /path/to/mysql-connector-java-8.0.12.jar
JBoss EAP 服务器日志中将显示一条消息,显示部署的驱动程序名称,该名称将在定义数据源时使用。
WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-8.0.12.jar
JDBC 驱动程序现在可供应用数据源引用。
将 JDBC 驱动程序 JAR 更新为 JDBC 4-Compliant
如果 JDBC 驱动程序 JAR 不兼容 JDBC 4,可以通过下列步骤使它可部署:
- 创建一个空临时目录。
-
创建
META-INF
子目录。 -
创建
META-INF/services
子目录。 创建
META-INF/services/java.sql.Driver
文件,再添加一行来指示 JDBC 驱动程序的完全限定类名称。例如,MySQL JDBC 驱动程序将添加下面这一行:
com.mysql.cj.jdbc.Driver
使用 JAR 命令行工具将此新文件添加到 JAR。
jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver
12.2.3. JDBC 驱动程序下载位置
下表提供了用于 JBoss EAP 的常见数据库的 JDBC 驱动程序的标准下载位置。
这些链接指向不受红帽控制或主动监控的第三方网站。有关数据库的最新驱动程序,请查看您的数据库供应商文档和网站。
表 12.1. JDBC 驱动程序下载位置
vendor | 下载位置 |
---|---|
MySQL | |
PostgreSQL | |
Oracle | http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html |
IBM | |
Sybase | jConnect JDBC 驱动程序是用于 SAP ASE 安装的 SDK 的一部分。目前此驱动程序本身没有单独的下载网站。 |
Microsoft |
12.2.4. 访问供应商特定类
在某些情况下,应用需要使用不属于 JDBC API 的供应商特定功能。在这些情况下,您可以通过在该应用程序中声明依赖项来访问特定于供应商的 API。
这是高级使用。只有 JDBC API 中没有功能的应用才应实施此过程。
在使用重新身份验证机制和访问特定于供应商的类时,此过程是必需的。
您可以使用 MANIFEST.MF
文件或 jboss-deployment-structure.xml
文件定义应用的依赖项。
如果您还没有这样做,请将 JDBC 驱动程序作为核心模块安装。
使用 MANIFEST.MF
文件
-
编辑应用的
META-INF/MANIFEST.MF
文件。 添加
Dependencies
行,并指定模块名称。例如,下面这一行将
com.mysql
模块声明为依赖项:Dependencies: com.mysql
使用 jboss-deployment-structure.xml
文件
-
在应用的
META
的文件。-INF/ 或
structure.xmlWEB-INF/
文件夹中创建名为 jboss-deployment- 使用
dependencies
元素指定模块。例如,以下示例
jboss-deployment-structure.xml
文件将com.mysql
模块声明为依赖项:<jboss-deployment-structure> <deployment> <dependencies> <module name="com.mysql"/> </dependencies> </deployment> </jboss-deployment-structure>
以下示例代码将访问 MySQL API:
import java.sql.Connection; ... Connection c = ds.getConnection(); if (c.isWrapperFor(com.mysql.jdbc.Connection.class)) { com.mysql.jdbc.Connection mc = c.unwrap(com.mysql.jdbc.Connection.class); }
随着连接由 IronJacamar 容器控制,请严格遵循特定于供应商的 API 准则。