jbosseap 72 跟什么版本的mysql兼容

 人参与 | 时间:2026-10-17 07:07:29

JBoss EAP 7.2 官方认证的版本 MySQL 版本是 5.7 和 8.0。如果你翻 Red Hat 的兼容 JBoss EAP 7.2 测试矩阵,MySQL Connector/J 对应的版本驱动版本是 8.0.x 系列,数据库服务端跑 5.7 或 8.0 都没问题。兼容但这里有个坑:很多人拿着 MySQL 5.6 或者更老的版本 5.5 来配,启动不报错,兼容跑一段时间就出诡异问题,版本比如连接池泄漏、兼容XA 事务挂死。版本我见过一个案子,兼容用 MySQL 5.6.35 配 EAP 7.2,版本压测到 200 并发时连接直接卡死,兼容换成 5.7.22 立刻正常。版本

为什么 5.7 是兼容底线?因为 EAP 7.2 内部依赖 JDBC 4.2 规范,MySQL 5.7 的版本 Connector/J 8.0 才完整支持 JDBC 4.2 的某些方法,比如 setNetworkTimeout 和 abort。5.6 时代的驱动虽然能编译,但运行时遇到连接中断,EAP 的 IronJacamar 连接池会调 abort 方法,老驱动直接抛 AbstractMethodError,日志里一堆异常,业务侧表现为请求随机超时。这个细节官方文档没重点提,踩过才知道。

MySQL 8.0 能用,但驱动必须换

EAP 7.2 默认自带的 MySQL 驱动模块是 mysql-connector-java-5.1.x,这个版本连 MySQL 8.0 会直接报 Unknown system variable 'query_cache_size'。因为 MySQL 8.0 移除了查询缓存,老驱动启动时硬要读这个变量。解决办法很简单:去 $JBOSS_HOME/modules/com/mysql/main/ 下把驱动 jar 换成 mysql-connector-java-8.0.12 以上,同时改 module.xml 里的资源名。改完记得清 standalone/data 下的缓存,不然 EAP 还会加载旧类。

我自己的测试环境是 EAP 7.2.5 + MySQL 8.0.28 + Connector/J 8.0.28,跑 JPA/Hibernate 5.3.20 完全正常。但要注意字符集:MySQL 8.0 默认 utf8mb4_0900_ai_ci,而 EAP 7.2 的 Hibernate 方言默认按 utf8mb4_general_ci 生成 DDL,建表时排序规则不一致会导致外键创建失败。手动在 standalone.xml 的数据源里加 <connection-property name="characterEncoding">UTF-8</connection-property> 能绕过去。

MariaDB 算不算?别混为一谈

有人问 MariaDB 10.3 能不能替 MySQL 5.7。EAP 7.2 的测试矩阵里没有 MariaDB,但社区有人跑通过。问题出在驱动上:MariaDB 自己的 Connector/J 和 MySQL 的协议有细微差别,EAP 的 ValidConnectionChecker 默认用 MySQL 的 SELECT 1,MariaDB 也认,但 XA 事务恢复时 XAResource.recover 的返回格式不同,会导致 EAP 的 tx 子系统误判。生产环境别这么干,除非你愿意改 IronJacamar 的恢复逻辑。

驱动放哪、怎么配,说具体点

别把 mysql 驱动 jar 扔到 deployments 目录下,那是自找麻烦。正确做法是建模块:modules/com/mysql/main/ 放 jar 和 module.xml,然后在数据源里写 <driver name="mysql" module="com.mysql"/>。EAP 7.2 的 standalone.xml 里数据源配置大概长这样:

<datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC</connection-url> <driver>mysql</driver> <security> <user-name>root</user-name> <password>password</password> </security> </datasource> 

serverTimezone=UTC 这个参数在 MySQL 8.0 驱动里是必须的,不然启动报时区错误。5.7 驱动可加可不加。

最后说个实际观察:EAP 7.2 配 MySQL 8.0 时,如果开了 useSSL=true 但没配信任库,连接会静默降级到非加密,日志里只有一行 WARN: Establishing SSL connection without server's identity verification is not recommended。很多人忽略这行,以为连上了就没事。生产环境要么关 SSL 显式写 useSSL=false,要么把 verifyServerCertificate 配全。别偷懒。

顶: 95踩: 9