gpt4 book ai didi

mysql - spring boot JDBC无法连接到docker容器中的mysql

转载 作者:行者123 更新时间:2023-11-29 05:47:44 26 4
gpt4 key购买 nike

我正在尝试在两个单独的 docker 容器中运行一个 spring boot 应用程序(作为一个简单的 REST api)和 mysql 服务器。但是,我无法在 spring 应用程序中获取 jdbc 连接来连接到 mysql。它们都独立工作,当我在本地运行 spring boot 和 mysql 时,实现工作正常。

docker-compose.yml

version: '3'
services:
database:
image: mysql:latest
container_name: mysqldb
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
expose:
- 3306
ports:
- 3306:3306
networks:
- backend
volumes:
- "dbdata:/var/lib/mysql"

web:
container_name: springboot
build: .
depends_on:
- database
expose:
- 8080
ports:
- 8080:8080
networks:
- backend

networks:
backend:

volumes:
dbdata:

在 spring boot 应用中:

val dataSource = DriverManagerDataSource()
dataSource.setDriverClassName("com.mysql.jdbc.Driver")
dataSource.setUrl("jdbc:mysql://mysqldb:3306/$dbName?characterEncoding=latin1")
dataSource.username = "dev"
dataSource.password = "password"

val jdbcTemplate = JdbcTemplate(dataSource)

spring boot返回的错误:

{
"status": 500,
"error": "Internal Server Error",
"message": "Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server."
}

我能够通过 mysql cli 从 spring boot 容器连接到 mysql 容器。因此,springboot 容器似乎能够解析“mysqldb”。

这看起来应该很简单。我不确定错误出在哪里,但我猜这与我不熟悉的 Spring Boot 内部工作原理有关。

最佳答案

将此 dataSource.setUrl("jdbc:mysql://mysqldb:3306/$dbName") 更改为:

dataSource.setUrl("jdbc:mysql://database:3306/$dbName")

你在compose中的服务名称是database,所以你需要使用它

关于mysql - spring boot JDBC无法连接到docker容器中的mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58162333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com