开发者社区 问答 正文

如何从SpringBoot Docker服务连接远程MySQL DB?

我正在运行一个需要远程MySQL数据库的SpringBoot应用程序。运行jar文件时,它正在工作。但是,当我尝试对springboot应用程序进行容器化时,它给出了SQLNonTransientConnectionException。我的Docker设置在Windows OS计算机中。

java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] 我的application.properties文件

spring.datasource.url=jdbc:mysql://xxx.xx.xxx.xx:3306/bootdb?createDatabaseIfNotExist=true autoReconnect=true&useSSL=false spring.datasource.username=remote spring.datasource.password=remotepsw spring.datasource.platform=mysql spring.user.datasource.driver-class-name=com.mysql.jdbc.Driver server.port=8090 大多数在线材料仅解释有关连接Docker Mysql和Docker SpringBoot Application的信息。

我应该如何进行?

展开
收起
保持可爱mmm 2019-11-15 14:36:13 996 分享 版权
阿里云 AI 助理回答

遇到SQLNonTransientConnectionException错误通常意味着你的Spring Boot应用在尝试连接到MySQL数据库时遇到了问题,尤其是在将其容器化之后。这可能是由多种原因造成的,包括网络配置、权限问题或数据库URL格式不正确等。以下是一些可能的解决方案和检查点:

  1. 网络问题

    • 确保Docker容器能够访问到外部MySQL服务器的IP地址和端口(3306)。在Windows上使用Docker时,可能会遇到网络桥接的问题。你可以考虑使用docker run命令时指定正确的网络模式,比如使用--network host来让容器共享宿主机的网络栈,但这需要谨慎操作,因为它会带来安全性和其他潜在问题。更推荐的做法是创建一个自定义网络并连接容器到该网络。
  2. 数据库URL格式

    • 你提供的数据库URL中包含了createDatabaseIfNotExist=trueautoReconnect=true,但这些参数应该以正确的分隔符(&)连接。请确保你的URL格式正确,例如:
      spring.datasource.url=jdbc:mysql://xxx.xx.xxx.xx:3306/bootdb?createDatabaseIfNotExist=true&autoReconnect=true
      
  3. MySQL驱动兼容性

    • 确认你的MySQL Connector/J版本与你的MySQL服务器版本兼容。根据错误信息,你使用的是8.0.18版本的驱动,确保它与远程数据库的版本相匹配。
  4. 环境变量与配置分离

    • 在容器化应用时,建议将敏感信息如数据库密码通过环境变量传递而不是直接写入application.properties。可以在Dockerfile或docker-compose.yml中设置环境变量,并在Spring Boot应用中使用``占位符引用它们。
  5. Dockerfile或docker-compose.yml配置

    • 确保在Dockerfile中安装了必要的依赖,比如如果使用的是Alpine镜像,可能需要安装一些库文件来支持MySQL驱动。
    • 在docker-compose.yml中,如果使用了服务网络定义,请确认网络配置正确无误,且服务名能够被解析。
  6. 防火墙和安全组设置

    • 检查运行MySQL服务器的机器上的防火墙规则,确保3306端口对Docker宿主机开放。如果是云服务器,还需要检查云服务商的安全组设置。
  7. 日志和调试

    • 查看MySQL服务器的日志,了解是否有拒绝连接的记录,这可以帮助定位问题。
    • 增加Spring Boot和MySQL驱动的日志级别,以便获取更详细的错误信息。

综上所述,从网络配置、数据库URL格式、驱动兼容性等方面逐一排查,应该能帮助你解决这个问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答