Spring Boot Jar包跨Win10/LinuxMint运行差异及JDBC连接异常
解决Windows 10下Spring Boot + JPA + MySQL启动失败的JDBC连接问题
我之前碰到过类似的跨系统JDBC连接坑,结合你的报错信息和配置来看,大概率是时区配置不匹配、Hibernate方言不对或者Windows环境特有的数据库访问限制导致的,下面给你一步步排查和解决的方案:
先整理你的现有核心配置(方便对比排查)
pom.xml核心依赖(简化版)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 其他依赖略 --> </dependencies>
application.properties配置
# datasource spring.datasource.url=jdbc:mysql://localhost/apotekfxboot spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # hibernate spring.jpa.hibernate.ddl-auto=update spring.jpa.generate-ddl=true spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true
解决方案1:修复JDBC URL的时区参数(最可能的根因)
Windows和Linux的系统时区默认配置往往不一样,而MySQL 8.0+(包括你的MariaDB 10.1.19)的JDBC连接必须指定时区,否则会直接抛出连接异常。修改你的URL:
spring.datasource.url=jdbc:mysql://localhost/apotekfxboot?serverTimezone=Asia/Jakarta&useSSL=false&allowPublicKeyRetrieval=true
serverTimezone:换成你所在的时区(比如Asia/Jakarta,或者UTC),要和数据库时区保持一致useSSL=false:避免Windows下SSL连接校验失败allowPublicKeyRetrieval=true:解决某些场景下的公钥检索错误
解决方案2:匹配正确的Hibernate方言
你用的是com.mysql.cj.jdbc.Driver(MySQL 8.0版本的驱动),但方言还是MySQL5Dialect,这在Windows下会触发兼容性问题。换成MariaDB对应的方言:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB10Dialect
如果你的Spring Boot版本较低,没有这个方言选项,可以用org.hibernate.dialect.MySQL8Dialect替代。
解决方案3:检查Windows下的数据库访问限制
- 防火墙设置:确保Windows防火墙允许MariaDB的3306端口入站连接,或者临时关闭防火墙测试
- 数据库绑定IP:打开Windows下MariaDB的
my.ini配置文件,确认bind-address设置为127.0.0.1或者0.0.0.0(允许所有IP访问) - root密码验证:确认Windows下MariaDB的root用户密码确实为空,有时候Windows安装时会自动设置密码,和Linux环境不一致
解决方案4:指定明确的MySQL Connector版本
你的pom.xml里没有指定mysql-connector-java的版本,Spring Boot默认引入的版本可能和MariaDB 10.1.19在Windows下不兼容。添加明确的版本号:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 选择和MariaDB 10.1.x兼容的稳定版本 --> </dependency>
建议按这个顺序排查,先试方案1和2,这两个是跨系统JDBC连接失败的最常见原因。如果还是不行,再检查防火墙和密码配置。
内容的提问来源于stack exchange,提问作者sahmada
相关产品推荐
相关产品推荐

