我正在运行一个需要远程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的信息。
我应该如何进行?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到SQLNonTransientConnectionException
错误通常意味着你的Spring Boot应用在尝试连接到MySQL数据库时遇到了问题,尤其是在将其容器化之后。这可能是由多种原因造成的,包括网络配置、权限问题或数据库URL格式不正确等。以下是一些可能的解决方案和检查点:
网络问题:
docker run
命令时指定正确的网络模式,比如使用--network host
来让容器共享宿主机的网络栈,但这需要谨慎操作,因为它会带来安全性和其他潜在问题。更推荐的做法是创建一个自定义网络并连接容器到该网络。数据库URL格式:
createDatabaseIfNotExist=true
和autoReconnect=true
,但这些参数应该以正确的分隔符(&)连接。请确保你的URL格式正确,例如:
spring.datasource.url=jdbc:mysql://xxx.xx.xxx.xx:3306/bootdb?createDatabaseIfNotExist=true&autoReconnect=true
MySQL驱动兼容性:
环境变量与配置分离:
Dockerfile或docker-compose.yml配置:
防火墙和安全组设置:
日志和调试:
综上所述,从网络配置、数据库URL格式、驱动兼容性等方面逐一排查,应该能帮助你解决这个问题。