springboot 配置多源数据库出错?

新手上路,请多包涵

springboot 配置多源数据库问题。
测试了一下springboot配置多源数据库,mysql和postgresql,yml配置如下:

spring:
  datasource:
    dynamic:
      primary: mysql
      strict: false
      datasource:
        mysql:
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: root
          url: jdbc:mysql://*.*.*.*:3306/student?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
       
        postgresql:
          url: jdbc:postgresql://localhost:5432/postgres 
          username: postgres
          password: weixj5217
          driverClassName: org.postgresql.Driver
 

运行程序,出现如下错误:

……
9:30:59:048] [INFO] - org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:292) - Root WebApplicationContext: initialization completed in 1080 ms
[19:30:59:138] [INFO] - com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:80) - mysql - Starting...
[19:31:21:237] [ERROR] - com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:594) - mysql - 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.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.29.jar:8.0.29]
……

从错误中看,好像mysql启动错误。

说明一下:
单独连接mysql数据库(不是多源数据库),程序正常,不会出现上面的错误。

多次修改yml配置,还是不行。

阅读 1.4k
avatarAI BotBETA

从你提供的信息来看,错误似乎是在尝试连接 MySQL 数据库时出现的。CommunicationsException: Communications link failure 通常表示程序无法与数据库建立连接。以下是一些可能的原因和解决方案:

  1. 数据库URL不正确:请检查你的 MySQL 数据库 URL 是否正确。URL 应该是 jdbc:mysql://<hostname>:<port>/<database-name>。从你的配置中看,URL 是正确的,但是还是检查一下 <hostname><port><database-name> 是否正确。
  2. 网络问题:确保你的应用程序和 MySQL 数据库之间的网络连接是畅通的。可以尝试在你的服务器上运行一些简单的测试,比如 ping 命令,看看是否能到达 MySQL 服务器。
  3. 防火墙限制:如果 MySQL 服务器在不同的机器或云环境中,确保没有任何防火墙或安全组规则阻止了你的应用程序连接到 MySQL 服务器。
  4. 驱动类名是否正确:检查你的项目中是否包含了正确的 JDBC 驱动,并且在配置中使用的驱动类名是否正确。对于 MySQL,应该使用 com.mysql.cj.jdbc.Driver
  5. 依赖冲突:确保你的项目中没有任何关于数据库连接的冲突依赖。例如,如果你使用了 Spring Boot 的默认配置,那么它可能会自动引入一些关于数据库连接的默认配置,这可能会与你自己的配置产生冲突。
  6. 时区问题:在配置中,你设置了 characterEncoding=utf-8serverTimezone=GMT。请确认 MySQL 服务器的时区设置是否与你的应用一致。如果不一致,可能会出现连接错误。

请按照上述步骤进行检查和调试,如果问题依然存在,欢迎你提供更多的信息以便我们进一步排查。

2 个回答

先检查有没有依赖

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    </dependency>

有的话需要贴完整错误信息

jdbc:mysql://...:3306/student
这就是你的配置么,还是说贴出来的时候替换成*

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题