带有 MariaDB 的 Spring Boot:驱动程序尚未收到来自服务器的任何数据包

Posted

技术标签:

【中文标题】带有 MariaDB 的 Spring Boot:驱动程序尚未收到来自服务器的任何数据包【英文标题】:SpringBoot with MariaDB: The driver has not received any packets from the server 【发布时间】:2020-09-18 17:37:12 【问题描述】:

我有一个 MariaDB,在使用 sequel Pro 连接时,我使用此凭据并且可以连接

我使用 SpringBoot

spring.datasource.url=jdbc:mysql://172.105.50.55:3306/pradera_db
spring.datasource.username=pradera_usr
spring.datasource.password=Mddejh847h$#@

但我有这个错误:

Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
    at java.base/java.net.Socket.connect(Socket.java:591)
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
    ... 81 common frames omitted
2020-05-31 12:30  [restartedMain] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2020-05-31 12:30  [restartedMain] ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.
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.

这是 pom.xml 中的依赖:

<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

【问题讨论】:

【参考方案1】:

试试这个作为连接字符串:

spring.datasource.url=jdbc:mysql://172.105.50.55:3306/pradera_db?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC

pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

【讨论】:

你能用这个用户创建/删除表吗? 我刚刚编辑了我的答案,不知道你有没有看到,数据库名不是你的... 在 pom 文件中有正确的依赖关系吗? (移除了H2并添加了mysql?) 移除 H2 依赖。 让我们continue this discussion in chat。【参考方案2】:

在运行数据库的机器上,将您的 ip 添加为端口 3306 上的允许连接

Linux:

iptables -I INPUT -p tcp -s your.ip.address.here --dport 3306 -j ACCEPT

窗户: 打开开始菜单,在搜索栏写:Windows防火墙,左侧打开高级设置,选择入站规则,按右侧新规则按钮,选择端口并按next,选择tcp并指定端口3306,按next,允许连接,然后通过选择域、私有、公共并为规则本身选择一个名称来完成。

检查服务是否正在运行并启用/启动它。

Linux:

sudo systemctl status mariadb
sudo systemctl enable mariadb
sudo systemctl start mariadb

Windows:打开开始菜单,搜索 Services.msc,在服务选项卡中找到您的 mariadb 服务并通过右键单击它来修改其状态。

希望对你有帮助。

【讨论】:

以上是关于带有 MariaDB 的 Spring Boot:驱动程序尚未收到来自服务器的任何数据包的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 和 MariaDB 的 Spring Boot 应用程序中配置多个(两个以上)数据源,

简单使用Spring Boot+JpaRepository+hibernate搭建项目

带有 FeignClient 的 Spring Boot RepositoryRestResource

带有 spring-boot-starter-web 的 Spring Cloud Gateway

带有 spring-boot 和 spring-security 的 JWT

带有 MVC 的 Spring Boot SOAP Web 服务