群晖环境下WildFly 19部署War包连接MariaDB 10通信链路失败求助
群晖环境WildFly 19部署War包数据库连接异常排查
问题背景
- War包部署至运行在群晖DiskStation设备的WildFly 19服务时,持续触发通信失败错误
- 已连续多日排查无进展,搜索引擎检索到的通用解决方案(包括将连接地址从localhost调整为127.0.0.1等尝试)均未生效
当前已知环境配置
- 运行组件版本:WildFly 19 + MariaDB 10
- 已配置的JNDI数据源:名称为PMProdDS
- 数据源连接URL:
jdbc:mysql://localhost:3307/pmprod?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=America/Chicago - 应用端persistence.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="portfoliomanager" transaction-type="JTA"> <jta-data-source>java:/PMProdDS</jta-data-source> <!-- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> --> <properties> <property name="hibernate.show_sql" value="false" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" /> <property name="javax.persistence.schema-generation.database.action" value="update" /> <property name="hibernate.format_sql" value="false" /> </properties> </persistence-unit> </persistence>
部署阶段抛出的完整错误堆栈
{"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"portfoliomanager.war#portfoliomanager\"" => "javax.persistence.PersistenceException: [PersistenceUnit: portfoliomanager] Unable to build Hibernate SessionFactory Caused by: javax.persistence.PersistenceException: [PersistenceUnit: portfoliomanager] Unable to build Hibernate SessionFactory Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/PMProdDS Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/PMProdDS Caused by: javax.resource.ResourceException: IJ031084: Unable to create connection Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Caused by: java.net.ConnectException: Connection refused (Connection refused)"}}
定位排查与解决思路
- 第一步校验MariaDB实际监听端口:通过群晖SSH终端执行
netstat -tulpn | grep 3307,确认MariaDB进程是否真的在3307端口处于LISTEN状态。群晖套件中心安装的MariaDB存在内外端口映射差异,不少用户会误将套件配置的外部映射端口作为本地实际监听端口,导致连接指向无效端口触发“Connection refused”报错,这是该场景下最高发的问题诱因。 - 校验JDBC驱动与方言适配关系:WildFly 19默认绑定的高版本MySQL驱动对MariaDB 10存在协议兼容问题,当前配置使用的
MySQL8Dialect会导致驱动握手阶段直接异常,需替换为org.hibernate.dialect.MariaDB103Dialect,同时确认WildFly部署的数据库驱动为MariaDB官方适配版本,而非高版本MySQL驱动。 - 校验数据库账号授权范围:确认MariaDB中PMProdDS关联的数据库账号是否拥有从localhost/127.0.0.1地址访问pmprod库的权限,可执行
SELECT user, host FROM mysql.user;核查账号的host绑定范围,若存在限制需重新授权并执行FLUSH PRIVILEGES;刷新权限配置。 - 校验本地网络拦截规则:检查群晖本地防火墙的端口放行列表,确认3307端口是否被加入允许访问范围,临时关闭防火墙测试可快速排除本地拦截导致的连接拒绝问题。
- 校验数据源配置有效性:在WildFly管理控制台中对PMProdDS数据源执行“Test Connection”操作,单独验证数据源本身的连通性,排除应用配置干扰。
内容的提问来源于stack exchange,提问作者RXP
相关产品推荐
相关产品推荐

